猫鼬模型保存回调的问题

Issue with Mongoose model.save callback

本文关键字:问题 回调 保存 模型      更新时间:2023-09-26

我正在用一本书学习Node.js。我没有按原样应对和使用书本示例代码,而是使用基础并在自己的代码中重用用作学习练习。

我有这个代码用于创建新用户,我将复制我认为相关的代码。我期望发生的事情是user.register使用model.register并接收真或假,具体取决于用户是否被创建并相应地发送响应

应用程序.js捕获帖子

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

用户.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);
            }
        });
    }
};

然后帐户注册

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 收到真或假,但我做错了什么,不知道为什么。

我使这段代码改变了方法,但由于这对我来说是一个学习实验,我希望能够以这种方式做到这一点。

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

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 :)
    });
};