0

これが非常に簡単な質問であることを願っていますが、なぜ機能しないのか理解できませんでした。

私の問題は、定義できない変数にアクセスすることです。

これは機能です:

  app.get('/loc', function (req, res) {

    if (typeof req.user.userId === 'undefined'){
        redirect('/');
    } else {
        var userId = req.user.userId;
        Loc.getP([userId], function(promos) {
           res.render('local/index', {
            title: 'Local'
          });   
        });
    }
  });

問題は、変数が未定義かどうかを確認している行にあります。そうでない場合は、他のURLにリダイレクトしたいだけです。定義されている場合は、ユーザーのデータをレンダリングします。非常に単純ですが、常にreq.user.userIdにアクセスしようとすると、次のようになります。

500 TypeError: Cannot read property 'userId' of undefined

私はインターネットで見つけたすべてを試しましたが、JSではそれが機能しなければならないと思います...

何か案が?ありがとう!

4

4 に答える 4

15

最初にreq.userが定義されているかどうかを確認してから、userIDを確認する必要があります。

if (req.user && typeof req.user.userId === 'undefined'){

または、次のようにテストできます。

if (typeof req.user === 'undefined' && typeof req.user.userId === 'undefined'){
于 2012-05-16T20:55:11.173 に答える
2

さらに短い:

if (!(req.user || {}).userId){

lodashにはこのための関数があることにも言及する価値があります: https ://lodash.com/docs/4.17.4#get

于 2015-02-19T18:18:30.593 に答える
2

NodeJSには、変数がまたはであるかどうかをチェックするisNullOrUndefined()メソッドを持つUtilクラスがあります。nullundefined

于 2015-12-30T19:42:31.613 に答える
0

次のコードはもっと簡単です:

if (!req.user || !req.user.userId){ // redirect
于 2012-05-17T07:08:25.850 に答える