Javascript 同步SQL查询后res.send将不起作用

Javascript 同步SQL查询后res.send将不起作用,javascript,Javascript,因此,我的第一个res.send命令可以工作,但在进行查询之后,我无法让它们工作。不知道该怎么办。对于每个if语句,console.log都像一个符咒,但是res.send确实是芬尼基 app.get('/info',函数(req,res){ var option1=req.query.option1 var option2=req.query.option2 var option3=req.query.option3 如果(选项1==“选择”| |选项2==“选择”| |选项3==“选择”)

因此,我的第一个res.send命令可以工作,但在进行查询之后,我无法让它们工作。不知道该怎么办。对于每个if语句,console.log都像一个符咒,但是res.send确实是芬尼基

app.get('/info',函数(req,res){
var option1=req.query.option1
var option2=req.query.option2
var option3=req.query.option3
如果(选项1==“选择”| |选项2==“选择”| |选项3==“选择”){
res.send('请选择所有有效字段并重试');
log(“并非所有字段都已填写”);
}
如果(选项3==“现金”){
var queryCash=connection.query('从tollschedule.cashtollschedule中选择通行费,其中InterChangeCenter='+option1+'和interchangeExit='+option2);
var formatCash=queryCash[0]。通行费;
var answerCash='$'+parseFloat(formatCash).toFixed(2);
res.send(“现金”);
console.log(queryCash);
console.log('从'+option1+'到'+option2+'成本计算'+answerCash'收到的通行费请求);
}
如果(选项3==“E-ZPass”){
var queryEz=connection.query('从tollschedule.ezpasstollschedule中选择通行费,其中InterChangeCenter='+option1+'和interchangeExit='+option2);
var formatEz=queryEz[0]。收费;
var answerEz='$'+parseFloat(formatEz).toFixed(2);
res.send('EZ');
控制台日志(queryEz);
console.log('从'+option1+'到'+option2+'成本计算'+answerEz'收到的收费请求);
}

})
这种发回响应的方式是错误的,因为您的代码在某些情况下会尝试向请求发送多个响应(这会引发错误)。例如,考虑当选项的值是这样的情况时,OpTest1=“选择”,Optudi2=“选择”,opt3.=“现金”用于这些值,两个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);
          }
        }
      })

您不能对同一响应多次调用
res.send()
。谢谢!但是,res.send命令除了第一个命令外仍然不起作用。不确定这里发生了什么。对于一个请求,您只能执行一次res.send()。如果要多次发送数据,请最后使用res.write()和res.end()。有关详细信息,请查看此项: