【发布时间】:2015-06-25 00:23:58
【问题描述】:
所以我使用 Express 和护照来创建应用程序。到目前为止一切顺利,但我遇到的问题是当我尝试在我的 mongo 数据库中查找某些内容时。从 mongodb 我可以从控制台添加和查询数据库,但是当我尝试从 express 中添加或查询时,我遇到了问题。正如您在下面看到的,我有我的模型,然后在我的passport.js 文件中需要它。当我执行User.findOne() 时,它会为变量user 和err 返回null。我不确定从这里去哪里,因为我知道数据就在那里,我只是无法从我的应用程序中查询它。
models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
local: {
username: String,
password: String
}
});
module.exports = mongoose.model('User', userSchema);
passport.js
var LocalStrategy = require('passport-local').Strategy;
var User = require('./models/user.js');
module.exports = function (passport) {
passport.use('local-registration', new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
}, function(username, password, done) {
console.log('credentials', username, password);
User.findOne({ 'local.username' : username }, function(err, user) {
console.log(user,err);
});
done();
}));
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
};
【问题讨论】:
-
尝试将您的
done()移动到User.findOne回调中。例如,就在console.log(user, err)之后。 -
所以,我做到了,并将其作为我的输出i.imgur.com/QyDh7fe.png
-
看起来它现在正在工作(控制台正在为用户记录
null,为错误记录null)。你在回调函数完成之前调用了done()。 -
好的,但是我怎么知道我是否找到了匹配项?因为我的数据库中有一个用户为 max。
标签: javascript node.js express mongoose