【问题标题】:Can't read 'null' returned objects from Mongoose无法从 Mongoose 读取“空”返回的对象
【发布时间】:2013-02-06 06:46:49
【问题描述】:

这是代码,很简单:

usermodel.findOne({ user: req.params.id }, function (err, user1){

   if (err) throw err;

   console.log(user1.user);

      if (req.session.user != user1.user) {

            console.log('Different user!');

      }

});

console.log 正确返回 user1.user,但是,当 node.js 进入 if 语句时,我收到此错误:

/root/pix/node_modules/mongoose/lib/utils.js:434
        throw err;
              ^
TypeError: Cannot read property 'user' of null
    at Promise.<anonymous> (/root/pix/app.js:168:38)
    at Promise.addBack (/root/pix/node_modules/mongoose/lib/promise.js:128:8)
    at Promise.EventEmitter.emit (events.js:96:17)
    at Promise.emit (/root/pix/node_modules/mongoose/lib/promise.js:66:38)
    at Promise.complete (/root/pix/node_modules/mongoose/lib/promise.js:77:20)
    at Query.findOne (/root/pix/node_modules/mongoose/lib/query.js:1600:30)
    at exports.tick (/root/pix/node_modules/mongoose/lib/utils.js:429:16)
    at Collection.findOne
     (/root/pix/node_modules/mongodb/lib/mongodb/collection.js:975:5)
    at Cursor.toArray (/root/pix/node_modules/mongodb/lib/mongodb/cursor.js:159:9)
    at Cursor.each (/root/pix/node_modules/mongodb/lib/mongodb/cursor.js:199:11)

为什么会发生这种情况,我该如何解决?

感谢您的提前!

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    您必须考虑没有返回文件的情况。在这种情况下,user1 将为空。并且 .user 的 null 是未定义的。所以你可以修改下面的代码来解决所有的情况:

    usermodel.findOne({ user: req.params.id }, function (err, user1)    {
        if (err) throw err;
            console.log(user1.user); // will be null if user does not exist
        if(user1 != null)   {
            if(req.session.user != user1.user)  {
                console.log('Different user!');
            }
            else
                console.log('Same user');
        }
        else    {   
            console.log('User does not exist');
        }       
    });
    

    【讨论】:

    • 我会试试的,问题是控制台日志不返回null。真的很奇怪。
    【解决方案2】:

    也许req.session 不存在于该范围内?

    (如果您在上一行访问 user1.user 时没有收到该错误,则表明 v8 正在为其他 .user 访问抛出错误:req.session.user。要么您不在闭包内引用了req,或者请求对象没有附加会话)。

    【讨论】:

    • 当节点进入user1.user 时出现错误。但也许错误是因为 req.session.user。
    • 如果你可以 console.log(user1.user) 那么问题不在于 user1 为空(如果它为空,你会在尝试 console.log 时出错)。试试 console.logging req.session 看看我的意思。
    • 我试过了,我收到了这个 { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, user: 'Mrmangado' } 我认为是好的。
    • 在这种情况下,只需将您的 if 语句更改为:if (!(user1 &amp;&amp; user1.user) || req.session.user != user1.user)
    • 这很奇怪。我有这个: if (!(user1 && user1.user) || req.session.user != user1.user){ usermodel.findOne({ _id: user1._id }, function (err, user){ I don'在 if 语句中不会出现任何错误,但我在 usermodel.findOne! 中再次出现相同的错误!
    猜你喜欢
    • 2018-08-07
    • 2020-09-14
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多