节点抛出新错误('在发送后无法设置标头。')

时间:2017-03-19 22:24:20

标签: javascript node.js express

我的一个节点调用遇到了上述问题。 据我所知,此错误显示您是否多次调用res.send。 看一下代码,它应该只发送一次res,所以我不确定这里有什么问题。

插入

时会抛出错误
var express = require('express');
var bodyParser = require('body-parser');
var session = require('express-session');
var cors = require('cors');
var massive = require('massive');
var config = require('./config');
var app = express();
app.use(bodyParser.json());
app.use(cors());

var db = massive.connect({connectionString: config.connectionString}, function(err, localdb){
    db = localdb;
    app.set('db', db);
});
app.post('/api/login', function(req, res, next) {
    db.get_users(function(err, users) {
        if(err) res.status(500).json(err);
        else {
            for(var i = 0; i < users.length; i++) {
                if(req.body.email == users[i].email && req.body.password == users[i].password) {
                    console.log("matched");
                    var currentUser = users[i];
                    res.send({
                        msg: 'passed',
                        user: currentUser
                    });
                }
                else { res.send("Username or Password is wrong"); }
            }
        }
    })
})
app.listen(3000, function() {
    console.log("I am listening");
});

1 个答案:

答案 0 :(得分:1)

您正在res.send()循环中执行for。这意味着你多次调用它。当您尝试向同一请求发送多个响应时,会看到您看到的错误。你不能这样做。

我不确切地知道您要完成的内容,但您可以在for循环中累积结果并在for循环后发送一个响应,或者您可以发送响应后立即中断或退出for循环。关键是你只能发送一个回复。