私は、単一の要求でうまく動作する平均アプリケーションを持っています。/api/products?pid=500
と呼んでみましょう。しかし、私は最近、リクエストのバースト(私は、約50の製品= 50のリクエスト、ポストデータで/api/products?pid=500
*** 550)を更新すると、req.bodyが新しいリクエストの値を取得することがあることを発見しました。平均ノードJSは多くのリクエストで性交を要求します
フロントアプリは、選択した製品のforeachの中のコールます:
ds.forEach((d, key) => {
this.ApiCall.setData('products', { action: 'send-product', data: d })
.subscribe((result) => {
//we have results
});
});
//setData makes a http.post().map
をバックアプリ/平均はポストを分析し、コードを合成してみました:
router.route('/')
.post(function (req, response) {
if(req.body.data){
var obj = { id: req.body.data.product_id }
if(req.body.data.linked_products){
req.body.data.linked_products.forEach(function(entry) {
obj.linked = entry; //more ifs
});
}
var async = require('async');
async.series({
q2: function(cb){
queryProducts.findOne({id: req.body.data.product_id, null).exec(cb);
},
q3: function(cb){
queryCategories.findOne({id: req.body.data.category_id, null).exec(cb);
}
}, function(err, qResults){
var alreadysent = false;
if (qResults.q3) qResults.q3.logs.forEach(function(entry) {
if(entry.sent){
alreadysent = true;
}
});
//more ifs
qResults.q3.external_codes.forEach(function(entry) {
obj.external_code = entry;//more ifs
});
if(req.body.data.price < 0){
response.json({message: "Negative price didn't sent"});
return;
}
if(qResults.q2.status=="inactive"){
response.json({message: "Inactive didn't sent"});
return;
}
req.body.data.campaigns(function(entry) {
obj.price_offers = entry;//more ifs
});
//more ifs and foreach similar
queryProducts.update({id: req.body.data.id}, {$push: { synced_products: obj }}, function (err, result) {
//HERE I found req.body.data with values of a future request
if(!err)
response.json({message: "Sent"});
return;
});
});
}
});
module.exports = router;
私は要求を行うことを理解
/api/products?pid=500
/api/products?pid=501
/api/products?pid=502
/api/products?pid=503
...
はタイミングが異なりますが、リクエスト(pid = 501)、最後のreq.bodyをreq.bodyの値が新しいreq(pid = 503)と呼んでいますか? どのように避けるべきアイデアですか?投稿後に最初に非同期を設定するか、
var reqbody = req.body
ありがとう!
問題を示す[mcve]で質問を更新してください。引用符で囲まれたコード( 'post'コールでparenとsemiが足りないと仮定した場合)は、リクエスト間のデータ出血に問題がないはずです。 –
@ T.J。クラウダー申し訳ありませんが、コードを更新しました、ありがとう! – Mihai
'var'の代わりに' let'を使ってみてください。 – Sagar