asynchronous响应 – 发送后无法设置标题

我是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); }); }; 

您正在调用您的路由代码中的next() ,将您的login代码片段转换为中间件并将其传递给下一个。 你会得到这个错误,因为在你的login代码中你用res.json输出,然后在下一步调用next 。 湖

你的问题是,只有在任何输出之前,标题必须出现。 无论您是在中间件上写入还是传递数据,只要您知道后续可能的标头/写入,就由您决定。

但是您可能需要重新考虑您的设置 – 一般来说,auth中间件将用于validation用户是否已login – 可能会检查会话cookie。 如果用户没问题,那么你可以根据cookie信息(如_id)获取(如果需要的话)用户数据或将用户redirect到login页面。

你在这里有什么是不需要中间件的login路线。 只需检查用户是否有效,并设置会话cookie或告诉他们这是不行的。

护照使事情变得更容易。 看看这个post 。 基本原则与我上面概述的相同,只是让事情变得更容易。