エラーをスローするのではなく、キャッチしようとしています。私はtry / catchを試みましたが、それがうまくいかなかったことに気づきました。2つのエラーはmongodbに関連していますが、node / expressエラーはまだスローされていると思います。
app.get( "/test/:lastName", function ( reqt, resp ) {
var driverName = reqt.params.lastName
mongoClient.connect( "mongodb://localhost/enteprise",
function( err, db ) {
if ( err ) {
console.error("1 mess " + err)
}
var database = db.db( "enteprise" )
var collection = database.collection( "driversCol" )
collection.findOne( { lastName : driverName },
function( err, res ) {
if ( err ) {
console.error("2 mess " + err)
}
resp.json( res.rate )
db.close()
})
})
})
ケース
もし私がcurl -X GET localhost:3000/test/Owen
それなら「43」はそのレートとして返されるべきです。
現在、iの場合curl -X GET localhost:3000/test/Cressey
、データベースにないため、タイプエラーがスローされます。
上記のコードと例でエラーをキャッチするにはどうすればよいですか?
まず、next()
コールバックで発生したエラーを返送するために使用する必要があると思います。
app.get( "/test/:lastName", function ( req, resp, next ) {
// some code...
if ( err ) {
return next("1 mess " + err)
}
TypeErrorについては、undefined
結果がないときにMongoDBから取得しているために発生していますが、これはエラーではないため、には入りませんif
。このような場合は、次のようにオブジェクトの存在を確認する必要があります。
resp.json( res && res.rate || {} )
ここで、あなたはこれらの場合にエラーを処理する方法についての別の例を持っています:
app.param('user', function(req, res, next, id) {
// try to get the user details from the User model and attach it to the request object
User.find(id, function(err, user) {
if (err) {
next(err);
} else if (user) {
req.user = user;
next();
} else {
next(new Error('failed to load user'));
}
});
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加