我正在使用mongodb和nodejs创建一个小数据库,我想更新一个字段,但我有这个错误,代码是,模型的名称是“ListaSalas”:
router.post('/updatesala', function(peticion, responsep){
var password = peticion.body.password;
var url = peticion.body.url;
ListaSalas.findOne({'url': url}, function (err, respuesta) {
var PassBusca = respuesta.password;
if(PassBusca){
responsep.writeHead(200, {"Content-Type": "text/html"});
responsep.write("passwordmal");
responsep.end();
}else{
ListaSalas.update({url: url}, {password: password});
responsep.writeHead(200, {"Content-Type": "text/html"});
responsep.write("passwordok");
responsep.end();
}
});
有人知道我的错误在哪里吗? 谢谢
答案 0 :(得分:1)
您没有检查是否有错误。
router.post('/updatesala', function(peticion, responsep){
var password = peticion.body.password;
var url = peticion.body.url;
ListaSalas.findOne({'url': url}, function (err, respuesta) {
if (err) return err;
var PassBusca = respuesta.password;
if(PassBusca){
responsep.writeHead(200, {"Content-Type": "text/html"});
responsep.write("passwordmal");
responsep.end();
}else{
ListaSalas.update({url: url}, {password: password});
responsep.writeHead(200, {"Content-Type": "text/html"});
responsep.write("passwordok");
responsep.end();
}
});
...
答案 1 :(得分:1)
问题在于 findOne()
方法返回的结果,如果没有匹配则GoalScorers
为空,因此错误
无法读取null
的属性'password'
要解决此问题,请直接使用 updateOne()
方法,并在回调中检查文档是否已被修改:
respuesta
答案 2 :(得分:1)
检查答案后我可以更改代码,多亏了chridam的想法我直接使用了这个方法,而不是updateOne()它是update(),而在数据库中我把一个默认值放在密码中字段("密码"),最后代码为:
router.post('/updatesala', function(peticion, responsep){
var password = peticion.body.password;
var url = peticion.body.url;
ListaSalas.findOne({'url': url}, function (err, respuesta) {
var compara = respuesta.password;
if (compara=="password"){
ListaSalas.update({'url': url}, {'password': password},function (err, result) {
if (err) return err;
});
responsep.writeHead(200, {"Content-Type": "text/html"});
responsep.write('passwordok');
responsep.end();
}else{
responsep.writeHead(200, {"Content-Type": "text/html"});
responsep.write('passwordmal');
responsep.end();}
});
});