【问题标题】:Node.js: throw new Error('Can\'t set headers after they are sent.');Node.js: throw new Error('Can\'t set headers after they are sent.');
【发布时间】:2015-08-16 08:32:38
【问题描述】:

每当执行此 get API 时,我都会收到此错误。我是 node.js 的新手,我真的迷路了,有人可以帮我看看我做错了什么吗?

app.get('/quote/:id', function(req, res) {

var results = [];
var userToken = [];

client1 = new pg.Client(connectionString);
client1.connect();
var query1 = client1.query('SELECT * FROM users WHERE access_token = $1', [req.body.access_token]);
query1.on('row', function(row){userToken.push(row);});
query1.on('end', function(result) {
    client1.end();
    if(userToken.length<1){
        res.status(401).send("Unauthorized");
    }
});

client2 = new pg.Client(connectionString);
client2.connect();
var query2 = client2.query('SELECT * FROM quotes WHERE quote_id = $1', [req.params.id]);
query2.on('row', function(row){results.push(row);});
query2.on('end', function(result) {
    client2.end();
    if(results.length<1){
        return res.status(404).send({"error":"NOT FOUND"});
    }
    return res.status(200).send(JSON.stringify(results));
});

});

【问题讨论】:

  • 你说你不断收到错误,你得到的确切错误是什么?
  • can't set headers after they are sent. 没错,你不能。在发送响应之前先设置标题。找到执行此操作的相关代码并进行更正。
  • 我认为你应该把return放在这之前:res.status(401).send("Unauthorized");
  • 在网络浏览器上我收到此错误“加载资源失败:服务器响应状态为 401(未授权)”但问题是我用于登录的密码正确且我得到的令牌与保存在数据库中的令牌相同。当我在终端上运行 heroku 日志时,我收到此错误“错误:发送后无法设置标题。”
  • @AndreyPopov 我已经更正了它,但我仍然得到同样的错误.. Abhinav 它没有说明错误来自哪一行

标签: node.js postgresql restful-authentication


【解决方案1】:

问题是您不能多次调用res.send。当你这样做时,它会结束响应。如果您需要向客户端发送更多数据,请创建一个数据对象 (var data = {}) 并添加您需要的所有内容。一切都完成后,再调用底部的res.status(statusCode).send(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多