0
私はエクスプレスベースのRESTサーバーを作成しています。コントローラコードの一部は以下の通りである:私が原因呼び出しの非同期の性質の異なる流れで二回order.save()関数を呼び出す必要があり非同期モジュールを使用したExpress + Mongooseリクエストハンドラのクリーナーアプローチ
/*JSON Request format
{ params: {
order_id: <string>, //mandatory
sp_id: <string> , //optional
order_date: <string> //optional
}
}
either "sp_id" or "order_date" (or even both) would be part of request parameters.
*/
var mongoose = require('mongoose');
var orderSS = require('../models/order');
var sp = require('../models/serviceProvider');
var update_order = function(req, res) {
orderSS.findById(mongoose.Types.ObjectId(req.params.order_id), function(err, order) {
if (err){
return res.json({message:"error", code:500});
}
if (req.params.sp_id){
sp.findById(mongoose.Types.ObjectId(req.params.sp_id, function(err, serviceProvider)){
order.sp_name = serviceProvider.name;
if (req.params.order_date)
order.order_date = req.params.order_date;
order.save(function(err){
if(!err)
return res.json({message:"order update", code:200});
});
});
} else if (req.params.order_date){
order.order_date = req.params.order_date;
order.save(function(err){
if (!err)
return res.json({message: "order updated", code:200});
});
}
});
};
。私は "非同期"モジュールを使用してよりクリーンなアプローチがあると感じています。誰かがそれをする方法を指導できる場合。