首页 文章

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

提问于
浏览
1

您好我有以下这种方法,我无法确定为什么我收到此错误

错误:发送后无法设置标头 . 在ServerResponse.json的ServerResponse.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/node_modules/express/lib/response.js:246:10)在/home/kwanso/Projects/myApp/Server/app.js:92:11在Layer.handle [as 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 / router / route.js:131:13)完成(/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/middleware/authenticate.js:243:13)/ home / kwanso / Projects / myApp /服务器/ node_modules / passport / lib / middleware / authenticate.js:250:15 at Authenticator.transformAuthInfo(/home/kwanso/Projects/myApp/Server/node_modules/passport/lib/authenticator.js:421:14) /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) - 被叫来自/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);
    });

看起来它与在回调中的回调方法中调用res.send有关 . 这是一个问题吗?

1 回答

  • 4

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

相关问题