快递/注册500与护照的未知错误

我有一个nodeJS应用程序使用快递和护照。 我试图处理login后的护照发送请求。 我的服务器控制台中得到一个未知的错误:POST /注册500

  • 第一个问题,我该如何debugging呢? 有什么方法可以让我得到更多关于为什么500'的信息?

第二个问题,任何想法,为什么它不快速浏览我下面的内容。 我知道它不是所有的代码,但也许有一些明显的..?

app.js:

.. var passport = require('passport'); require('./config/passport')(passport); .. var routes = require('./routes/index')(app, passport); .. 

Passport.js定义了我对用户和数据库的处理。 它定义了一个称为local-signup的localStragery。

/routes/index.js:

 module.exports = function(app, passport) { .. var express = require('express'); var router = express.Router(); .. router.post('/signup', passport.authenticate('local-signup', { successRedirect : '/profile', failureRedirect : '/signup' }) ); .. return router } 

更新:

我的代码实际上正在工作,它正在把新用户放在数据库中,它的应用程序正在返回500.使用console.log()的负载和反复试验我已经把它和我从我的护照战略返回。 我有以下代码正在被击中:

..

  } else { console.log("-] Email is not found, creating new user"); user = {}; user['email'] = email; user['password'] = bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); console.log("-] Inserting into db"); userCollection.insert( user, function(err, user) { if (err) { console.log("Error: " + err ); console.log("records: " + user ); throw err; } console.log("returned user: " + user) return done(null, user); 

它与我返回的用户有关。 如果我摆脱了这条线,而只是返回,它的工作正常,但authentication的呼吁认为它已经失败,并遵循redirect,而不是成功的。 问题是我从一个应用程序中得到了这个代码,它使用了将数据库内容包装在一个对象中的mongoose。 我不想这样做,我想直接做数据库调用自己像上面的代码。

有任何想法吗?

您没有使用API​​中的error handling。

尝试这样的事情,而不是:

 passport.authenticate('local-signup', { successRedirect: '/profile', failureRedirect: '/login', failureFlash: true }) 

…这告诉护照“闪烁”由callback产生的任何错误(假设有一个定义为local-signup verify阶段的一部分)。

现在,假设您的应用程序的local-signup是这样设置的:

 var local-signup = require('passport-local').Strategy; 

…你应该能够很容易地sortingerror handling。 以下是http://passportjs.org/guide/configure/上的configuration文档示例 – 注意如何返回错误:

 passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } )); 

对我来说,解决scheme是不使用:

 passport.authenticate('local-signup', { 

但:

 passport.authenticate('local', { 

如果在注册策略时没有设置名称,则这是默认设置:

 passport.use(new LocalStrategy({ 

如果您有多个LocalStrategies,则可以传入一个名称:

 passport.use('local-signup', new LocalStrategy({