Express中无法使用res.send发送响应的问题求助
问题解决方法
错误原因
- 变量名冲突:第一个
db.query的回调里用res作为结果参数,直接覆盖了外层Express的响应对象res,导致后续无法调用正确的响应方法。 - 调用对象错误:
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
相关产品推荐
相关产品推荐

