下面的代码是我的节点服务器的代码。
要求: 每当api从客户端收到请求时,如果有记录,它都应该从数据库中选择数据。如果万一数据不存在,则应在数据库中插入一条新记录,然后将数据返回给客户端。
router.post('/api/getSelectedEmployeeInfoToUpdate', (req, res)=>{
let obj = req.body;
if (Object.keys(obj).length === 0) {
res.status(400).send({'value':'invalid Parameters'});
}
const tempVal = '';
obj.forEach(emp => {
names += "'" + emp.name + "'" + ',';
});
let jsonArray=[];
obj.forEach(emp=>{
// Insert some dummy values
var insertQueryString = `INSERT INTO rostertable_v2(name, month, year, day1, day2, day3,
day4, day5, day6, day7) VALUES ('${req.body.name}','${req.body.month}',${req.body.year},
'${tempVal}','${tempVal}','${tempVal}',
'${tempVal}','${tempVal}','${tempVal}')`;
var sql_query = "SELECT * FROM `rostertable_v2`"
+" WHERE `name` = '" + emp.name +"'"
+" AND `month` = '" + emp.month +"'"
+" AND `year` = " + emp.year;
connection.query(sql_query, (error, rows, fields)=>{
//callback
if(!!error){
console.log('Error in query...' + error);
res.send({'success':0})
}else{
if (rows.length > 0) {
console.log('/getEmployeeInfoToUpdate: Successfull query');
// res.send(rows);
jsonArray.push(rows);
console.log(jsonArray);
}else{
//insert an empty record into the `rostertable`
connection.query(insertQueryString, (error, result)=>{
//callback
if(!!error){
console.log('Error in query...' + error);
res.send([{'success':0}]);
}else{
if (result.affectedRows > 0) {
connection.query(sql_query, (error, rows, fields)=>{
//callback
if(!!error){
console.log('Error in query...' + error);
res.send({'success':0})
} else {
// res.send(rows);
jsonArray.push(rows);
}
});
}
}
});
}
}
});
});// obj.forEach
console.log('Json Array is : ' + jsonArray);
res.send(jsonArray);
});
我的问题:我无法获得结果!
我使用let jsonArray=[];
来推送查询结果。但是在我使用jsonArray
将数据发送给用户时,它什么也没返回吗?
我不明白这是什么原因!
但是我jsonArray.push(rows)
却以下面的方式存储数据
[ [ RowDataPacket {
name: 'Andy',
month: '0',
year: 2019} ]]`
如何解决此问题
非常感谢任何帮助
答案 0 :(得分:0)
一旦推送数组,然后发送res。
jsonArray.push(rows);
//Now send res
res.send(jsonArray);
在您的情况下,您已在将数据填充到数组中之前写了res.send
。并且由于节点的async
性质,我们不必等待将数据填充到数组中。