0

これはコードで、非常に単純です:

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)

これが発生する理由と、これを解決するにはどうすればよいですか?

よろしくお願いします!

4

2 に答える 2

0

おそらくreq.sessionそのスコープには存在しませんか?

(前の行でuser1.userにアクセスするときにエラーが発生しない場合は、v8が他の.userアクセス​​に対してエラーをスローしていることになりますreq.session.userreqまたは、リクエストオブジェクトにセッションがアタッチされていません)。

于 2013-02-04T19:31:39.520 に答える
0

ドキュメントが返されない場合を考慮する必要があります。このような場合、user1はnullになります。また、nullの.userは未定義です。したがって、すべてのケースを考慮して、以下のようにコードを変更することができます。

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');
    }       
});
于 2013-02-05T04:16:15.453 に答える