2016-12-27 79 views
0

我做了這個路線來檢查貓鼬中是否有一些數據,並基於此我將狀態變量設置爲true,並在路由級別檢查它是否爲true,適當地發送響應,我得到的錯誤響應服務器Nodejs:無法讀取null的屬性

崩潰

不能讀「狀態」空

這裏的財產是代碼:

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

var state = false; 
user.remove({}, function(err){ 
    if(err){ 
     console.log('didnt clear'); 
     return; 
    }else{ 
    user.find({}, function(err, data){ 
     if(err){ 
     console.log('error occured while finding'); 
     return; 
     } 
     this.state = true; 
     console.log(this.state); 

    }) 
    return this.state; 
    } 
}) 

if(state){ 
     res.json('removed all documents in collection); 
    }else{ 
    res.json('something bad happened'); 
    } 
}) 
+0

'let state:Boolean = false;'意思是什麼? – Teemu

+0

設置變量爲false –

+0

這對我來說是新的。從什麼時候冒號一直是JS中的賦值操作符? – Teemu

回答

1

首先變化:

this.state = true; 
    console.log(this.state); 

到:

state = true; 
    console.log(state); 

其次,這有沒有影響:

return this.state; 

這不要緊,你從回調返回的內容,它會無論如何被忽略。

接下來,這將永遠是假的:

if(state){ ... } 

因爲之前您的任何回調甚至開始這條線將被調用。您正在測試變量之前,它有機會與您分配給它的原始false不同。

這些是想到這些代碼的第一個問題。可能會有更多的問題,但首先你需要了解你的陳述的評估順序,然後才能進入細節。

如果在變量可能發生變化之前測試變量,那麼不要指望變量與您分配給它的原始值不同。