res.send发送后无法设置标题

你好,我有这个方法下面,我不能确定为什么我得到这个错误

错误:发送后无法设置标题。 ServerResponse.header(/home/kwanso/Projects/myApp/Server/node_modules/express/lib/response.js:718:10)ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:335:11)在ServerResponse.json( /home/kwanso/Projects/myApp/Server/app.js:92:11 at Layer.handle [as /home/kwanso/Projects/myApp/Server/node_modules/express/lib/response.js:246:10) (/ home / kwanso / Projects / myApp / Server / node_modules / express / lib / handle_request](/home/kwanso/Projects/myApp/Server/node_modules/express/lib/router/layer.js:95:5) (/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/middleware/authenticate.js:243:13)在/ home / kwanso / Projects / myApp /路由器/ route.js:131:13)在Authenticator.transformAuthInfo(/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/authenticator.js:421:14)上的服务器/ node_modules / passport / lib / middleware / authenticate.js:250:15 /home/kwanso/Projects/myApp/Server/node_modules/passport/lib/authenticator.js:443:5)在/ home / kwanso / Projects / myApp / Se rver / node_modules / passport / lib / middleware / authenticate.js:247:22 at /home/kwanso/Projects/myApp/Server/node_modules/passport/lib/http/request.js:58:7 at pass(/ home / kwanso / Projects / myApp / Server / node_modules / passport / lib / authenticator.js:267:43)在序列化(/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/authenticator.js:276:7)在/home/kwanso/Projects/myApp/Server/app.js:97:3传递(/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/authenticator.js:284:9) – 调用from /home/kwanso/Projects/myApp/Server/node_modules/express/lib/application.js:629:43(function EventEmitter.logerror)

我的方法如下:

passport.use(new LocalStrategy( function(username, password, done) { console.log("New Local Strategy"); User.find({ email: username }, function (err, user) { console.log(user[0]._doc); if (err) { return done(err); } if (!user) { return done(null, false); } if (user[0]._doc.password != password) { return done(null, false); } console.log("sending"); return done(null, user); console.log("sendt"); }); return done(null , false); } )); var isValidPassword = function(user, password){ return true; } app.post('/login', passport.authenticate('local') , function(req, res) { console.log("Back"); res.send(req.user[0]); }); passport.serializeUser(function(user, done) { console.log("Serialize User"); done(null, user); }); passport.deserializeUser(function(user, done) { console.log("De Serialize User"); done(null, user); }); 

这看起来像是在callback中的callback方法中调用res.send。 这是一个问题吗?

你在LocalStrategy里面调用完成的callback两次

一次在函数的结尾(用户名,密码,完成){

 return done(null , false); 

并从数据库中提取用户后

  if (err) { return done(err); } if (!user) { return done(null, false); } if (user[0]._doc.password != password) { return done(null, false); } console.log("sending"); return done(null, user); 

只要删除最后一行,你知道了

  return done(null , false);