无法发起HTTP POST请求:Node.js登录功能POST请求异常排查
排查登录POST请求失败的问题
我来帮你一步步梳理可能导致无法发起POST请求的原因,结合你给出的代码片段来看:
1. 路由配置不匹配
你在app.js里把POST请求/login指向了indexRouter,但登录的处理逻辑却写在users.js的router.get('/')里——这完全对不上啊!
正确的做法应该是把POST请求路由指向usersRouter,比如:
// app.js里修改POST路由 app.post('/login', usersRouter);
然后在users.js里把处理方法改成POST:
// users.js router.post('/', function(req, res, next) { // 你的登录逻辑代码 });
如果你的usersRouter是挂载在/users路径下的,那可能需要调整表单的action为/users/login,同时在users.js里定义router.post('/login', ...)。
2. 前端表单配置错误
检查登录页面的表单是否正确设置了请求方法和提交路径:
<form method="POST" action="/login"> <!-- 用户名、密码输入框 --> <input type="text" name="user_name"> <input type="password" name="password"> <button type="submit">登录</button> </form>
- 确保
method是POST(不是默认的GET) - 确保
action和你后端配置的路由路径一致(比如/login)
3. 缺少POST请求体解析中间件
Express默认不会解析POST请求的请求体,所以如果没配置对应的中间件,req.body会是undefined,就算请求发出去了也拿不到参数。
在app.js里添加以下中间件:
// 解析表单格式的请求体 app.use(express.urlencoded({ extended: true })); // 如果需要支持JSON格式的请求,也加上这个 app.use(express.json());
额外的安全提示
你的SQL语句直接拼接用户输入,存在严重的SQL注入风险!建议改用参数化查询:
var sql = "SELECT id, first_name, last_name, user_name FROM `users` WHERE `user_name`=? and password = ?"; db.query(sql, [name, pass], function(err, results) { // 处理查询结果 });
内容的提问来源于stack exchange,提问作者jdotdoe
相关产品推荐
相关产品推荐

