Postman向Node.js(Express)+MySQL发POST请求无响应问题排查
问题排查与修复方案
核心问题列表
1. 模型层SQL语句参数不匹配
models/users.js中save方法的INSERT语句字段数和传入值数量不一致:
原代码:
字段列表只声明了static save(user) { return db.execute('INSERT INTO users (email, password) VALUES (?, ?, ?)', [ user.email, user.password, user.admin, ]); }email、password两个字段,但后续传入了3个值,多出来的admin参数会触发SQL语法错误。
修复:补全字段列表static save(user) { return db.execute('INSERT INTO users (email, password, admin) VALUES (?, ?, ?)', [ user.email, user.password, user.admin, ]); }2. 校验失败后无响应逻辑
controllers/auth.js中参数校验失败后直接return,既没有返回响应给客户端,也没有触发错误处理中间件,导致请求直接挂起,无任何返回:
原代码:
修复:校验失败时返回错误响应if (!errors.isEmpty()) return;if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); }3. 异常捕获后未传递给错误中间件
controllers/auth.js的catch块中,给错误设置状态码后直接return,没有调用next(err)将错误传递给全局500错误处理中间件,导致服务端报错后也无响应输出:
原代码:
修复:移除错误赋值前的return,确保next执行catch (err) { if (!err.statusCode) { return err.statusCode = 500; } next(err); }catch (err) { if (!err.statusCode) { err.statusCode = 500; } next(err); }
其他可选优化
- 确认MySQL的
users表中存在admin字段,字段类型与传入值匹配 - Postman请求头确认已设置
Content-Type: application/json,避免express无法解析请求体 - index.js中
app.listen可修改为监听ports变量,适配环境变量配置的端口:app.listen(ports, () => { console.log(`server started at port ${ports}`); });
内容的提问来源于stack exchange,提问作者syahiruddin
相关产品推荐
相关产品推荐

