簡體   English   中英

錯誤“發送后無法設置標題”

[英]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});
  }  
});

“ res.render”的作用是什么,html文件是什么樣的?

http://expressjs.com/en/api.html

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM