【问题标题】:findOne not working in mongoose/nodefindOne 在猫鼬/节点中不起作用
【发布时间】:2021-11-29 13:36:14
【问题描述】:

这个问题与NodeJS平台的mongoose模块有关。

当我运行以下命令时,我如何获得数据库的响应?:

router.get('/profileSettings', securePages, function(req, res, next){
    databaseUserModel.findOne({'profileID':req.session.facebookProfileId}, function(err, userFromDB) {
        if(userFromDB){
            done(null, userFromDB);
        } else {
            console.log('Result does not exist');
       }
    });

    res.render('profileSettings', {title:siteName + ': Profile Settings', user:userFromDB});
})

它似乎对我不起作用,因为 userFromDB 似乎不存在 - 在 findOne 和 res.render 方法中! (准确地说是未定义)

我的 databaseUserModel 如下所示:

var databaseUser = new mongoose.Schema({
   profileID:String,
   fullname:String,
   profilePic:String,
   email:String,
   birthday:String,
   location:String,
   about:String
});

var databaseUserModel = mongoose.model('databaseUser', databaseUser);

错误信息是:

ReferenceError: userFromDB is not defined
at Object.handle (/Users/shayan/Repos/imo/routes/routes.js:75:84)
at next_layer (/Users/shayan/Repos/imo/node_modules/express/lib/router/route.js:103:13)
at Object.securePages [as handle] (/Users/shayan/Repos/imo/routes/routes.js:20:13)
at next_layer (/Users/shayan/Repos/imo/node_modules/express/lib/router/route.js:103:13)
at Route.dispatch (/Users/shayan/Repos/imo/node_modules/express/lib/router/route.js:107:5)
at /Users/shayan/Repos/imo/node_modules/express/lib/router/index.js:205:24
at Function.proto.process_params (/Users/shayan/Repos/imo/node_modules/express/lib/router/index.js:269:12)
at next (/Users/shayan/Repos/imo/node_modules/express/lib/router/index.js:199:19)
at next (/Users/shayan/Repos/imo/node_modules/express/lib/router/index.js:176:38)

我觉得这可能是我可能遗漏的一些非常简单的东西,但我只是开始接触 NodeJS(实际上是作为一个整体进行开发)。我之前为我的公司使用了一种小众语言(他们已经开发了它)所以请多多包涵。

任何意见都会对大家有所帮助!我真的被困住了

PS:我的 mongoose 对象的工作原理与我使用它来存储数据一样。

【问题讨论】:

  • 如果您可以发布错误消息会有所帮助:)
  • 当然好! :) - 添加了伴侣。菜鸟错误
  • find 方法也给你这个错误?
  • 您是否尝试过添加登录以显示 err 或 userFromDB。例如:console.log(err);控制台.log(userFromDB); if (userFromDB){ 之前
  • 是的,我都试了。顺便说一句,终于修好了。请参阅我对以下已批准答案的人的回复。谢谢大家!这里的社区很棒!

标签: node.js mongodb mongoose


【解决方案1】:

您只能在 mongoose 查询中使用结果数据,即您不能在 findOne 之外使用来自 userFromDB 的值返回。将您的res.render 放入其中即可解决。

router.get('/profileSettings', securePages, function(req, res, next){
    databaseUserModel.findOne({'profileID':req.session.facebookProfileId}, function(err, userFromDB) {
        if(userFromDB){
            res.render('profileSettings', {title:siteName + ': Profile Settings', user:userFromDB});
        } else {
            console.log('Result does not exist');
       }
    });
})

【讨论】:

  • 谢谢伙计——这是主要问题之一!另一个问题是 databaseUserModel 因为数据库中的集合被称为“用户”。多么愚蠢的错误!
【解决方案2】:

有时,我们会错过 findOne 之前的 await 关键字,从而导致不适当的结果。

我之前的代码

let allUser = User.find({});

我所有的业务逻辑都失败了,因为我还没有检索到它

等待后我的代码

let allUser = await User.find({});

现在它可以正确检索数据并且我的代码可以正常工作。

这是我犯的一个错误,我认为 findOne 不起作用。希望它能帮助人们避免这样的错误。

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2019-09-10
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多