Node.js Express项目中第二个POST接口无响应的解决方法
修复第二个POST请求无响应的问题
你的代码里有几个关键问题导致老师登录的POST接口无响应,以下是具体修改方案:
1. 修正数据库查询表错误
老师登录接口的SQL查询错误指向了students表,应该改为查询teachers表:
// 原错误代码 connection.query("SELECT * FROM students WHERE user_id = ? AND password = ?", [username1, password1], function(error, results, fields) { // 修改后 connection.query("SELECT * FROM teachers WHERE user_id = ? AND password = ?", [username1, password1], function(error, results, fields) {
2. 补充数据库查询错误处理
两个登录接口都没有处理数据库查询失败的情况,一旦SQL执行出错,请求会因未返回响应而挂起。必须添加错误捕获逻辑:
// 学生登录接口修改后 app.post("/student", encoder, function(req, res) { var username = req.body.username; var password = req.body.password; connection.query("SELECT * FROM students WHERE user_id = ? AND password = ?", [username, password], function(error, results, fields) { // 新增错误处理 if (error) { console.error("数据库查询出错:", error); return res.status(500).send("服务器内部错误"); } if (results.length > 0) { res.redirect("/welcomestudent"); } else { res.redirect("/"); } }); }); // 老师登录接口修改后 app.post("/teacher", encoder, function(req, res) { var username1 = req.body.username1; var password1 = req.body.password1; connection.query("SELECT * FROM teachers WHERE user_id = ? AND password = ?", [username1, password1], function(error, results, fields) { // 新增错误处理 if (error) { console.error("数据库查询出错:", error); return res.status(500).send("服务器内部错误"); } if (results.length > 0) { res.redirect("/welcometeacher"); } else { res.redirect("/"); } }); });
3. 验证前端表单字段名一致性
检查login_page.html中老师登录表单的输入框name属性是否为username1和password1。如果表单实际使用的是username和password,则后端需要修改变量名对应:
// 如果老师表单字段是username和password,修改为: var username = req.body.username; var password = req.body.password;
建议统一前后端字段名,避免不必要的混淆。
4. 优化中间件注册(可选)
当前你在每个POST接口单独传入encoder中间件,可以改为全局注册,简化代码:
// 删除原有的const encoder = ...,替换为全局注册 app.use(bodyParser.urlencoded({extended: true})); // 之后的POST接口无需再传encoder参数 app.post("/student", function(req, res) { ... }); app.post("/teacher", function(req, res) { ... });
内容的提问来源于stack exchange,提问作者sonu
相关产品推荐
相关产品推荐

