无法读取null的属性'password'

时间:2015-12-23 23:29:41

标签: javascript node.js mongodb

我正在使用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();
    }
  });

有人知道我的错误在哪里吗? 谢谢

3 个答案:

答案 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();}
  });
});