我是Node js的新手,并尝试使用for循环并将数据插入数据库来迭代集合中的每个项目。
我已经实现了以下代码,但它只插入了集合中的最后一个对象。
我还想获取每个请求的参数值..我需要用请求映射
任何人都可以节省我的时间。
以下是代码。
app.post('/api/upload/UpdateQualityExcel',function(req,res){
UpdateQualityExcel_Flag = req.param('Flag');
body_data=req.body;
UpdateQualityExcel_res_data=[];
// var i=1;
for(i=0;i<body_data.EXCEL_ROWS.length;i++)
{
Postdata(UpdateQualityExcel_Flag, body_data.EXCEL_ROWS[i], function(id) {
console.log(id);
});
}
});
function Postdata(UpdateQualityExcel_Flag, EXCEL_ROWS, cb) {
sql.close();
sql.connect(config, function (err) {
if (err) console.log(err);
//create Request object
var request = new sql.Request();
console.log(EXCEL_ROWS);
request.input('p_Flag', sql.VarChar, UpdateQualityExcel_Flag)
request.input('p_ProjectCode', sql.NVarChar, EXCEL_ROWS.PROJECT_CODE);
request.input('p_ActivityId',sql.INT,EXCEL_ROWS.ACTIVITY_ID);
request.input('p_ActivityName', sql.VarChar, EXCEL_ROWS.ACTIVITY_NAME);
request.output('po_Message',sql.VarChar)
// query to the database and get the records
request.execute("[dbo].[ARA_SP_ACTION_QualityExcelUpdate]").then(function(recordSet) {
if (recordSet == null || recordSet.length === 0)
return;
// res.send(recordset);
cb("test");
}).catch(function (err) {
console.log(err);
});
});
}
答案 0 :(得分:0)
Postdata
是异步的,我们可以看到我们有多个实例同时运行。
据说,他们都使用全局变量sql
。我打赌这里有一些冲突。
首先Postdata
打开连接以便推送,然后另一个Postdata
实例关闭它。
我建议你这样做:
修改强>
以下是一些可以帮助您解决问题的代码,显然是一个开始:)
function postdata(UpdateQualityExcel_Flag, EXCEL_ROWS) {
return new Promise((resolve, reject) => {
//
// ... do stuff ...
//
request.execute("[dbo].[ARA_SP_ACTION_QualityExcelUpdate]")
.then(resolve)
.catch(reject);
});
}
// Call all postData
Promise.all(body_data.EXCEL_ROWS.map(x => postData(UpdateQualityExcel_Flag, x)))
.then((rets) => {
// All your answers are here
})
.catch((err) => {
// You got here in case of error
});