我做了这条路线来检查猫鼬中是否有一些数据,基于此我将状态变量设置为true,并在路由级别检查其是否为真,并且发送响应相应,我得到了错误响应和服务器崩溃
无法读取'state'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 :(得分:1)
首先改变:
this.state = true;
console.log(this.state);
为:
state = true;
console.log(state);
其次,这没有效果:
return this.state;
从回调中返回什么并不重要,无论如何都会被忽略。
接下来,这将永远是假的:
if(state){ ... }
因为在你的任何回调开始之前都会调用此行。您在变量有可能与您分配给它的原始false
不同之前测试变量。
这些是我想到的代码的第一个问题。可能会有更多问题,但首先您需要先了解评估报表的顺序,然后才能详细了解。
在变量可以更改之前测试变量时,不要指望它与您分配给它的原始值有任何不同。