[英]Error “can't set headers after they are sent”
我正在嘗試編寫一個node.js應用程序以使用omdb api獲取電影列表。 當我嘗試請求/result
路由時,出現以下錯誤:
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:494:11)
at ServerResponse.setHeader (_http_outgoing.js:501:3)
at ServerResponse.header (/home/cabox/workspace/APIs/movie_search_app/node_modules/express/lib/response.js:767:10)
at ServerResponse.contentType (/home/cabox/workspace/APIs/movie_search_app/node_modules/express/lib/response.js:595:15)
at ServerResponse.send (/home/cabox/workspace/APIs/movie_search_app/node_modules/express/lib/response.js:145:14)
at Request._callback (/home/cabox/workspace/APIs/movie_search_app/app.js:18:13)
at Request.self.callback (/home/cabox/workspace/APIs/movie_search_app/node_modules/request/request.js:186:22)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
at Request.<anonymous> (/home/cabox/workspace/APIs/movie_search_app/node_modules/request/request.js:1163:10)
我的app.js文件中的完整代碼如下:
var express = require("express");
var app = express();
var request = require("request");
app.set("view engine", "ejs")
app.get("/", function(req, res){
res.send("Hello, it workds! ... and this is the home page");
});
app.get("/results", function(req, res){
res.send("Hello, it workds!");
request("http://omdbapi.com/?s=california&apikey=thewdb", function(error, response, body){
if (!error && response.statusCode ==200) {
var data = JSON.parse(body);
res.send(results.search(0).title);
res.render("results", {data: data});
}
});
});
app.listen(3000,function(){
console.log("Movie App has started!!!");
});
衷心希望有人能幫助您提供有關如何處理/解決此錯誤的指導。
您已經發送了一個字符串作為響應,然后稍后嘗試將渲染的頁面也發送給客戶端,這是行不通的...
app.get("/results", function(req, res){
[...]
if (!error && response.statusCode ==200) {
[...]
// HERE IS YOUR PROBLEM
res.send(results.search(0).title);
res.render("results", {data: data});
}
});
@moneydhaze感謝您的回復。 您讓我徹底檢查了代碼,並簡單地開始了。 似乎res.send和res.render發生沖突。 當我取出res.render並簡化代碼時; 有效。 請參見下面的簡化代碼:
var express = require("express");
var app = express();
var request = require("request");
app.set("view engine", "ejs")
app.get("/", function(req, res){
res.send("This is the Home Page")
});
app.get("/results", function(req, res){
request("http://www.omdbapi.com/?s=guardians+of+the+galaxy&apikey=thewdb", function(error, response, body){
if (!error && response.statusCode ==200){
res.send(body);
}
})
});
app.listen(3000,function(){
console.log("Movie App has started!!!");
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.