You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express中无法使用res.send发送响应的问题求助

问题解决方法

错误原因

  1. 变量名冲突:第一个db.query的回调里用res作为结果参数,直接覆盖了外层Express的响应对象res,导致后续无法调用正确的响应方法。
  2. 调用对象错误:results是数据库返回的结果集,本身没有send方法,发送响应必须用Express提供的res对象。

修改后的代码

router.post('/checkPaid', (req, res, next) => {
  // 将回调里的res改为queryResults,避免覆盖外层响应对象
  db.query(`SELECT email_address FROM users WHERE email_address = ?`, req.body.email_address, (err, queryResults) => {
    if(err) {
      // 推荐用next(err)交给Express错误处理中间件,而非直接throw
      return next(err);
    }
    console.log('User found');
    db.query(`SELECT course_paid FROM users WHERE email_address = ?`, req.body.email_address, (error, results) => {
      if(error) {
        console.log(error);
        return res.status(500).send('数据库查询失败');
      }
      // 使用Express的res对象发送响应
      res.send('test');
    })
  })
})

额外优化建议

两次查询可以合并为一次,减少数据库请求:

router.post('/checkPaid', (req, res, next) => {
  db.query(`SELECT email_address, course_paid FROM users WHERE email_address = ?`, req.body.email_address, (err, results) => {
    if(err) {
      return next(err);
    }
    if(results.length === 0) {
      return res.status(404).send('用户不存在');
    }
    console.log('User found');
    res.send('test');
  })
})

内容的提问来源于stack exchange,提问作者DMantas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:48:25