簡體   English   中英

res.send發送后無法設置標題

[英]res.send Can't set headers after they are sent

您好,我在下面有此方法,我無法確定為什么會收到此錯誤

錯誤:發送標頭后無法設置標頭。 在ServerResponse.json((http://outgoingMessage.setHeader(_http_outgoing.js:335:11)在ServerResponse.header(/home/kwanso/Projects/myApp/Server/node_modules/express/lib/response.js:718:10) /home/kwanso/Projects/myApp/Server/app.js:92:11在Layer.handle的/home/kwanso/Projects/myApp/Server/node_modules/express/lib/response.js:246:10) handle_request](/home/kwanso/Projects/myApp/Server/node_modules/express/lib/router/layer.js:95:5)在下一個(/ home / kwanso / Projects / myApp / Server / node_modules / express / lib /完整的(/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/middleware/authenticate.js:243:13)上的router / route.js:131:13)/ home / kwanso / Projects / myApp /身份驗證器.transformAuthInfo()上的服務器/node_modules/passport/lib/middleware/authenticate.js:250:15通過(/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/authenticator.js:421:14) / home / kwanso / Projects / myApp / Se上的/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/authenticator.js:443:5) 在/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/http/request.js:58:7的rver / node_modules / passport / lib / middleware / authenticate.js:247:22通過(/ 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)-稱為從/home/kwanso/Projects/myApp/Server/node_modules/express/lib/application.js:629:43(函數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);
    });

似乎與在回調內部的回調方法中調用res.send有關。 那是個問題嗎?

您在LocalStrategy Twice中調用完成的回調

功能結束時一次(用戶名,密碼完成){

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM