我是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);
});
};
答案 0 :(得分:0)
您正在路由代码中调用next()
,实质上是将您的登录代码段转换为中间件并将其传递下去。您收到此错误的原因是,在您的登录代码中,您使用res.json
输出,然后仍然使用next
调用下一步。升。
您的问题只是标题必须在任何输出之前出现。只要您了解后续可能的标头/写入,无论您是在中间件中编写还是传递数据都取决于您。
但您可能想重新考虑您的设置 - 通常,auth中间件将用于验证用户是否已登录 - 可能是检查会话cookie。如果用户没问题,那么您可以根据cookie信息(即_id)获取(如果需要)用户数据,或者将用户重定向到登录页面。
这里有login
路由,它并不真正需要中间件。只需检查用户是否有效,并设置会话cookie或告诉他们这是不行的。
Passport让事情变得更轻松。看看这个post。基本原理与我上面概述的相同,只是让它更容易上手。