错误:发送标头后无法设置标头。在validateHeader(_http_outgoing.js:491:11)

时间:2019-01-14 22:57:11

标签: node.js ejs

我在节点上放了一个小的Todo列表应用程序,并且遇到了上面的错误。我也使用ejs作为模板。我的app.js文件如下所示。

const express = require("express");
const bodyParser = require("body-parser");
 //const request = require('request');
const date = require(__dirname + "/date.js")

//console.log(date());
const app = express();

app.use(express.static("public"));

const listItems = ['cooking', 'shopping', 'watch TV', 'go to the gym'];
const workItems = []

app.use(bodyParser.urlencoded({extended: true}));

app.set("view engine", "ejs");

app.get("/", function(req, res){

 const day = date.getDate();

 res.render("list", { listTitle: day, items: listItems });

 });

app.post('/', function(req, res){
  //post items
 const item = req.body.newItem;
 if (req.body.list === "Work") {
  workItems.push(item)
  res.redirect("/work")
  } else {
 listItems.push(item);
 res.redirect("/")
 }

//
 listItems.push(item);
 res.redirect("/")

})

app.get('/work', function(req, res){

res.render("list", {listTitle: "Work List", items: workItems});

});

app.post('/work', function(req, res){
//post items
 let item = req.body.newItem;
 workItems.push(item)
 res.redirect("/work")
 })

 app.listen(3000, function(){
 console.log("Server started on port 3000.");
 });

当我添加一个项目时,它似乎可以正常工作,但这就是我在控制台中所拥有的,而且我不确定哪里出了问题。

1 个答案:

答案 0 :(得分:0)

您的问题在本部分中,您在res.redirect("/")之外调用ifelse并生成错误,因为如果res.redirect()是true或false并在之后不久将被调用这些条件再次被调用。并且在发送后无法设置标题。

app.post('/', function(req, res){
//post items
    const item = req.body.newItem;
    if (req.body.list === "Work") {
        workItems.push(item)
        res.redirect("/work")
    } else {
        listItems.push(item);
        res.redirect("/")
    }//
    listItems.push(item);
    res.redirect("/")
})

您必须努力检查自己的逻辑,或者可能是在此代码段中使用switch的情况。