【问题标题】:res.send wont work after sync-SQL queries同步 SQL 查询后 res.send 将不起作用
【发布时间】:2021-02-26 22:57:37
【问题描述】:

所以我的第一个 res.send 命令有效,但在进行查询后我无法让它们工作。不知道该怎么办。对于每个 if 语句,console.log 就像一个魅力,但 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);
}
})

【问题讨论】:

  • 您不能在同一个响应中多次调用res.send()

标签: javascript


【解决方案1】:

这种发回响应的方式是错误的,因为您的代码在某些条件下会尝试向请求发送多个响应(这会引发错误)。例如,考虑选项的值是这样的情况 - option1='SELECT', option2='SELECT', 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);
          }
        }
      })

【讨论】:

  • 谢谢!然而 res.send 命令除了第一个命令之外仍然无法工作。不知道这里发生了什么。
  • 对于请求,您只能执行一次 res.send()。如果你想多次发送数据,最后使用 res.write() 和 res.end()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2011-04-13
相关资源
最近更新 更多