Node.js服务器登录中间件未触发,请求无响应问题排查
登录接口无响应及404问题排查
问题现象
- 点击登录按钮后无任何反应
- 用GET请求访问
http://localhost:3000/login时,返回404 resource not found for using get to access it instead of post错误
问题原因及修复方案
服务端代码问题
JSON解析中间件未正确初始化
原代码中app.use(bodyParser.json);缺少调用括号,导致中间件未生效,无法解析客户端发送的JSON请求体,服务端无法获取req.body中的参数。
修复:将代码改为app.use(bodyParser.json());GET请求访问POST接口的正常提示
服务端仅定义了POST方法的/login接口,用GET访问自然返回404,这是符合预期的,无需修改,只需确保客户端用POST请求即可。
客户端代码问题
请求参数键名不匹配
客户端发送的参数键是username,但服务端期望的是mobileNo,导致服务端验证时会返回"手机号和密码必填"的错误。
修复:将参数改为{ mobileNo: num, password: pass }请求状态处理不完整
原代码仅处理了xhr.status === 200的情况,未处理400、401等错误状态,导致即使服务端返回错误,客户端也无提示。
修复:补充错误状态的处理逻辑
修复后的代码片段
服务端修改部分
// 替换原有的bodyParser配置 app.use(bodyParser.json()); // 补上括号
客户端修改部分
// 替换参数生成代码 var params = JSON.stringify({ mobileNo: num, password: pass }); // 完善xhr状态处理 xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { var response = JSON.parse(xhr.responseText); if (response.success) { localStorage.setItem('mobileNo', num); alert("Login successful!"); // 这里可以添加页面跳转逻辑 } else { alert("Login failed: " + response.message); } } else { // 处理非200状态的错误 try { var errorResponse = JSON.parse(xhr.responseText); alert("Error: " + errorResponse.message); } catch (e) { alert("Request failed with status: " + xhr.status); } } } };
内容的提问来源于stack exchange,提问作者Anthony Kinyua
相关产品推荐
相关产品推荐

