【问题标题】:Query mongo database from application not working从应用程序查询 mongo 数据库不起作用
【发布时间】: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


【解决方案1】:

尝试使用

 passport.serializeUser(function (user, done) {
    done(null, user._id);
});

user._id 是 mongodb 中正确生成的 id。 !

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多