异步响应 - 发送后无法设置标头

时间:2016-08-28 16:49:26

标签: node.js express

我是Node.js编程的新手。我遇到了大麻烦,因为我在以下代码中一直遇到同样的错误。我无法理解那里有什么问题。

  

发送后无法设置标头。

 var mongoose = require('mongoose');

 module.exports = function(req, res) {
    var User = require('../../Schema/User');
    User.count({ $and: [{ "username": req.body.username }, { "password": req.body.password }] },
        function(err, count) {
            console.log(count);
            res.json(count);
        });
};

1 个答案:

答案 0 :(得分:0)

您正在路由代码中调用next(),实质上是将您的登录代码段转换为中间件并将其传递下去。您收到此错误的原因是,在您的登录代码中,您使用res.json输出,然后仍然使用next调用下一步。升。

您的问题只是标题必须在任何输出之前出现。只要您了解后续可能的标头/写入,无论您是在中间件中编写还是传递数据都取决于您。

但您可能想重新考虑您的设置 - 通常,auth中间件将用于验证用户是否已登录 - 可能是检查会话cookie。如果用户没问题,那么您可以根据cookie信息(即_id)获取(如果需要)用户数据,或者将用户重定向到登录页面。

这里有login路由,它并不真正需要中间件。只需检查用户是否有效,并设置会话cookie或告诉他们这是不行的。

Passport让事情变得更轻松。看看这个post。基本原理与我上面概述的相同,只是让它更容易上手。