2012-05-16 2 views
0

아주 쉬운 질문이지만 왜 작동하지 않는지 이해할 수 없었습니다.NodeJS undefined var gets error

내 문제는 정의 할 수없는 변수에 액세스하는 것입니다.

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' 
      }); 
     }); 
    } 
    }); 

문제는 var에 정의되지 않은 경우, 내가 확인하고있어 줄 수 있습니다 :

는 기능입니다. 그렇지 않은 경우 다른 URL로 리디렉션하려고합니다. 정의 된 경우 사용자의 데이터를 렌더링합니다. 아주 간단한,하지만 항상 나는 다음과 같은 얻을 req.user.userId에 액세스하려고 :

500 TypeError: Cannot read property 'userId' of undefined 

내가 인터넷에서 찾을 모든 노력을하지만, 나는 그것이 작동하는 JS 생각 ...

어떤 생각? 감사!

+1

req.user를 사용할 수 있습니까? 확실히, req.user가 먼저 정의되지 않았는지 확인해야합니다 :) – nXqd

+0

제가 생각하기에, 꽤 쉬웠습니다.)하지만이 때 밤에는 약간의 도움이 필요합니다. 감사! – enedebe

답변

13

req.user가 정의되어 있는지 먼저 확인한 다음 사용자 ID 검사를 수행해야합니다.

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

번갈아 당신은 이런 식으로 테스트 할 수 있습니다 : 다음 코드

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

더 간단하다

if (!req.user || !req.user.userId){ // redirect 
+3

이 경우 아마 괜찮을 지 모르지만 userId가 0 또는 빈 문자열임을 예상 할 수 있다면 실제로 값이 있더라도 false로 평가됩니다. 이 프리젠 테이션에서 진실 - y 및 거짓 - y 슬라이드를보십시오 : http://www.stevefenton.co.uk/cmsfiles/assets/File/Publications/javascriptsurprises.pdf – Fenton

2

심지어 짧은 :

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

또한 언급 할 가치가 lodash는이 기능을 가지고 있습니다 :,https://lodash.com/docs/4.17.4#get

+1

쿨, 나는 이것을 좋아했습니다! –

1

NodeJS 변수가 null 또는 undefined 있는지 확인하는 방법 isNullOrUndefined() 가지고 백분율 클래스를 갖는다.

+0

은 더 이상 사용되지 않습니다. 어떤 대안? –

+0

이 라이브러리 https://validatejs.org에는 https://validatejs.org/#utilities에 유용한 메소드 목록이 있습니다. –