2013-04-12 4 views
0
var session = {} 
session.query = {} 
session.query.username = "foo"; 

if(session.query.username) 
    console.log('surname exists'); 

if(session.query2.username) 
    console.log('surname exists'); 

этот код выдает это исключение: «TypeError: Не удается прочитать свойство„QUERY2“неопределенной»делает глубокий объект существует контроль в nodejs

искали в StackOverflow и нашел это решение:

... 
if(session && session.query2 && session.query2.username) 
    console.log('surname exists') 

, но это очень длинный, и у меня есть элементы управления вложенными объектами, поэтому я не могу использовать этот метод. Есть ли какой-нибудь короткий метод, который я могу использовать?

+3

вы можете попробовать это [ответ] (http://stackoverflow.com/a/15399878/828197) и прочитать немного более подробно [анализ] (https://coderwall.com/p/cvbgia) этого ответа. – Ragnarokkr

+1

Другой подход заключается в переносе этой проверки в блок try. Но дело в том, что вы не должны пытаться избежать структурирования кода, чтобы этот тип проверки был необходим. – raina77ow

+0

@ Ragnarokkr Я действительно не смог найти его в Поиске Google или в Stackoverflow Search. Думаю, это ответит на мой вопрос. Спасибо! – xecute

ответ

0

Это может работать для вас:

try { 
    session.query.username && 
    console.log('Username exists'); 
} catch() { 
    console.log('Username does not exist'); 
} 

В случае очень глубоких путей (или когда вам необходимо проверить многие из них), она может быть короче.

Смежные вопросы