You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务器登录中间件未触发,请求无响应问题排查

登录接口无响应及404问题排查

问题现象

  • 点击登录按钮后无任何反应
  • 用GET请求访问http://localhost:3000/login时,返回404 resource not found for using get to access it instead of post错误

问题原因及修复方案

服务端代码问题

  1. JSON解析中间件未正确初始化
    原代码中app.use(bodyParser.json);缺少调用括号,导致中间件未生效,无法解析客户端发送的JSON请求体,服务端无法获取req.body中的参数。
    修复:将代码改为app.use(bodyParser.json());

  2. GET请求访问POST接口的正常提示
    服务端仅定义了POST方法的/login接口,用GET访问自然返回404,这是符合预期的,无需修改,只需确保客户端用POST请求即可。

客户端代码问题

  1. 请求参数键名不匹配
    客户端发送的参数键是username,但服务端期望的是mobileNo,导致服务端验证时会返回"手机号和密码必填"的错误。
    修复:将参数改为{ mobileNo: num, password: pass }

  2. 请求状态处理不完整
    原代码仅处理了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:47:04