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

};

db.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ページに渡して同じものを表示したい。私は何をすべきか?私は試した

エラーをスロー (err)

しかし、それはサーバーを壊します。

4

2 に答える 2

0

node.js >= 0.8.x を使用している場合は、新しいドメイン機能を Express/Connect アプリケーションに追加するconnect-domainミドルウェアを使用できます。doamin モジュールを使用すると、エラーを手動で渡す必要はありません。エラーをスローするだけで、エラーハンドラーに自動的に渡されます。

于 2012-09-01T20:00:30.847 に答える
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呼び出しはルートと db コードの間のメディエーターにすぎないことに気付くでしょう...それが必要かどうかはあなた次第です。

HTH、マイク

于 2012-09-01T16:39:57.907 に答える