2014-03-31 69 views
2

我正在学习一本书的Node.js。我没有像现在那样应对和使用图书样本代码,而是在自己的代码中使用基础和重用,作为学习练习。问题与猫鼬model.save回调

我有这个代码为一个新的用户创建,我会复制我认为是相关的。 我希望发生的是,user.register使用model.register,并获得真或假,如果用户创建或根据不和发送响应accordly

app.js捕捉后

app.post('/user', users.actions.register); 

user.js的寄存器

var register = function (req, res) { 
    if (req.body.username === '' || 
     req.body.email === '' || 
     req.body.password === '') { 

     //Some field is blank - insufficient information 
     console.log('User creation failure: Insufficient data'); 
     res.json(400); 

    } else { 

     var newUser = new models.account.user ({ 
      username: req.body.username, 
      email: req.body.email, 
      password: req.body.password 
     }); 

     models.account.register (newUser, function (succ) { 
      console.log (succ); 
      if (succ === true) { 
       res.json(200); 
      } else { 
       res.json(400); 
      } 
     }); 
    } 
}; 

然后account.register

var register = function (newUser) { 
    console.log ('Save command sent.'); 
    newUser.save (function (err) { 
     if (err) { 
      console.log(err); 
      return false; 
     } 
     console.log('User Created'); 
     return true; 
    }); 
}; 

用户获取对数据库的创建,并在控制台上输出

Save command sent. 
User Created 

我期待发生的是,SUCC接收真的还是假的,但我做错了什么,并不能找出原因。

我让这段代码改变了方法,但是因为这是一个对我的学习实验,所以我希望能够这样做。

如果有人能指出我正确的方向或告诉我我做错了什么,我将不胜感激。 谢谢。

回答

2
models.account.register (newUser, function (succ) { 
    ... 
} 

您传递一个匿名函数作为register的第二个参数。因此,register必须接受并调用它的结果,像这样

var register = function (newUser, callBackFunction) { // accept the callback 
    console.log ('Save command sent.'); 
    newUser.save (function (err) { 
     if (err) { 
      console.log(err); 
      return callBackFunction(false); // invoke it on failure :(
     } 
     console.log('User Created'); 
     return callBackFunction(true);  // invoke it on Success :) 
    }); 
}; 
+0

非常感谢。它正在像我期待的那样工作。所以我从中得到的是,我使用的是未声明的回调函数,而且我没有以正确的方式返回。也许我会需要更多的阅读,虽然我可以看到我不完全理解它的错误。再次感谢您的快速回答。 – Gabriel