0

我有以下代码将数据插入 DB - 此代码必须按顺序执行

路由器JS

module.exports = function(app) {

    app.get('/registerUser', function(req, res ) {

            objuser.userName  = 'testuser';
            objuser.password  = 'password';

            objuser.status  = true;

            registerUser (objuser ); //calls Business.js
            res.OK();
            res.end ();
    });
}

业务.js

var registerUser =  function (objuser  )
{


  userDB.registerUser (objuser ) ; //calls db.js

};

数据库.js

exports.registerUser  = function (objUser )
{

        var User = db.model(strCollectionName, UserSchema );

        var objSchema = new User(objUser);
        objSchema.save(function (err)
        {
            if (err)
               console.error (err);
            else
                console.log ("registerUser : Data insertion success.");

        });

}

在 db.js 中,如果我尝试插入重复值,我会从 Mongo 收到错误消息。我想将错误消息传递给 HTML 页面以显示相同的内容。我该怎么办?我试过

抛出错误(错误)

但它破坏了服务器。

4

2 回答 2

0

假设您使用的是 expressjs,我会使用next回调。像这样:

app.get('/registerUser', function (req, res, next) {
    objuser.userName  = 'testuser';
    objuser.password  = 'password';

    objuser.status  = true;

    registerUser(objuser, function (err) {
        if(err) {
            //this will be handled by express's errorHandler or whatever you have configured
            return next(err); 
        }
        //do whatever you want to do with the response
    });
});

如果您不想让 Business.js 调用异步,那么您显然会将此代码更改为try...catch流。不过,Node.js 应用程序更喜欢使用异步调用,因此 nodejs 应用程序中的一个常见约定是使用(err, result)参数公开回调。所以你的db.js电话是:

exports.registerUser  = function (objUser, callback )
{    
        var User = db.model(strCollectionName, UserSchema );
        var objSchema = new User(objUser);
        objSchema.save(function (err) {
            if (err) return callback(err);
            return callback(null, objSchema);

        });
}

到现在为止,您可能会注意到您的Business.js呼叫只是您的路线和数据库代码之间的中介......您是否需要它取决于您。

HTH,迈克

于 2012-09-01T16:39:57.907 回答
0

如果您使用的是 node.js >= 0.8.x,您可以使用connect-domain中间件,为您的 express/connect 应用程序添加新的域功能。使用域模块,您无需手动传递错误。您可以简单地抛出错误,它将自动传递给错误处理程序。

于 2012-09-01T20:00:30.847 回答