res.send在同步SQL查询后无法工作



所以我的第一个res.send命令可以工作,但在进行查询后,我无法让它们工作。不知道该怎么办。console.log对每个if语句都很有魅力,但res.send真的很挑剔。

app.get('/info', function(req,res) {
var option1 = req.query.option1
var option2 = req.query.option2
var option3 = req.query.option3
if (option1 == 'SELECT' || option2 == 'SELECT' || option3 == 'SELECT') {
res.send('Please select all valid fields and try again');
console.log('Not all fields were filled out');
}


if (option3 == 'Cash') {
var queryCash = connection.query('SELECT toll FROM tollschedule.cashtollschedule WHERE interchangeEnter=' + option1 + ' AND interchangeExit=' + option2);
var formatCash = queryCash[0].toll;
var answerCash = '$' + parseFloat(formatCash).toFixed(2);
res.send('Cash');
console.log(queryCash);
console.log('Toll request received from ' + option1 + ' to ' + option2 + ' costing ' + answerCash);
}
if (option3 == 'E-ZPass') {
var queryEz = connection.query('SELECT toll FROM tollschedule.ezpasstollschedule WHERE interchangeEnter=' + option1 + ' AND interchangeExit=' + option2);
var formatEz = queryEz[0].toll;
var answerEz = '$' + parseFloat(formatEz).toFixed(2);   
res.send('EZ');
console.log(queryEz);
console.log('Toll request received from ' + option1 + ' to ' + option2 + ' costing ' + answerEz);
}
})

这种发回响应的方式是错误的,因为您的代码在某些条件下会尝试向请求发送多个响应(这会引发错误(。例如,考虑选项的值如下的情况-option1='ELECT',option2='ELECT],option3='Cash'对于这些值,将执行两个if语句,并且您的代码将尝试发送两个会出错的响应。

为了避免这种情况,重构代码如下:

app.get('/info', function(req,res) {
var option1 = req.query.option1
var option2 = req.query.option2
var option3 = req.query.option3
if (option1 == 'SELECT' || option2 == 'SELECT' || option3 == 'SELECT') {
res.send('Please select all valid fields and try again');
console.log('Not all fields were filled out');
}
else{
if (option3 == 'Cash') {
var queryCash = connection.query('SELECT toll FROM tollschedule.cashtollschedule WHERE interchangeEnter=' + option1 + ' AND interchangeExit=' + option2);
var formatCash = queryCash[0].toll;
var answerCash = '$' + parseFloat(formatCash).toFixed(2);
res.send('Cash');
console.log(queryCash);
console.log('Toll request received from ' + option1 + ' to ' + option2 + ' costing ' + answerCash);
}
else if (option3 == 'E-ZPass') {
var queryEz = connection.query('SELECT toll FROM tollschedule.ezpasstollschedule WHERE interchangeEnter=' + option1 + ' AND interchangeExit=' + option2);
var formatEz = queryEz[0].toll;
var answerEz = '$' + parseFloat(formatEz).toFixed(2);   
res.send('EZ');
console.log(queryEz);
console.log('Toll request received from ' + option1 + ' to ' + option2 + ' costing ' + answerEz);
}
}
})

最新更新