如何在Node.js Express的app.get中捕获错误,无数据时返回null?
问题解决:查询不存在的数据时返回null而非报错
问题原因
当数据库中没有匹配的数据时,db.query返回的result是空数组,此时直接访问result[0].email会因为result[0]是undefined触发TypeError,导致服务器抛出错误。另外原代码未处理数据库查询本身可能出现的错误(比如连接异常、SQL语法错误)。
修复方案
修改代码,先处理查询错误,再判断是否查询到数据:
const express = require('express'); const app = express(); const mysql = require('mysql'); // 补充数据库连接实例(原代码中db变量未定义) const db = mysql.createConnection({ host: '你的数据库地址', user: '数据库用户名', password: '数据库密码', database: '目标数据库名' }); // 建立数据库连接 db.connect((err) => { if (err) throw err; console.log('数据库连接成功'); }); app.use(express.json()); app.get('/api/get',(req,res)=>{ const sql = "SELECT * FROM user WHERE email = 'not_exist';" db.query(sql,(err, result)=>{ // 优先处理数据库查询错误 if (err) { return res.status(500).send({ error: '数据库查询失败' }); } // 判断是否查询到数据,无数据时返回null if (result.length === 0) { return res.send(null); } // 查询到数据时正常返回结果 console.log(result[0].email); res.send(result); }) }) app.listen(3001, ()=>{ console.log('The server has started'); });
关键修改点
- 补充了缺失的数据库连接创建代码,解决原代码中
db未定义的问题 - 增加数据库查询错误处理逻辑,避免因数据库问题导致服务器崩溃
- 通过
result.length判断是否存在数据,为空时返回null - 用
return终止后续代码执行,避免重复发送响应
内容的提问来源于stack exchange,提问作者kwak
相关产品推荐
相关产品推荐

