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

Express.js中POST登录请求成功后发送文件时出现Cannot GET /login错误

Express.js中POST登录请求成功后发送文件时出现Cannot GET /login错误

嘿,我来帮你排查下这个问题~你遇到的情况主要有两个关键点需要解决,一个是代码里的变量冲突问题,另一个是路由请求方式的误解导致的Cannot GET /login提示。

首先说最核心的变量名冲突问题,这会导致你根本无法正确验证用户的登录信息:
你在代码外层定义了var acc = {}来存储用户提交的用户名和密码,但在fs.readFile的回调函数里又用let acc = JSON.parse(jsonData)重新定义了同名变量——这会直接覆盖外层的acc!所以后面验证循环里的acc.username和acc.password,其实是从storage.json读出来的对象的属性(而这个对象只有accs数组,根本没有username和password字段),你的验证条件永远成立不了,authenticated一直是false,自然永远只会返回"fail"。

解决这个问题很简单,把回调里的变量名改个名字就行,比如改成storedAcc:

app.post('/login', function (req, res) {
  var acc = {};
  var data = req.body;
  acc.username = data.username;
  acc.password = data.password;

  fs.readFile('storage.json', (err, jsonData) => {
    if (err) throw err;
    // 修改变量名,避免覆盖外层存储用户提交数据的acc
    let storedAcc = JSON.parse(jsonData);
    let authenticated = false;

    for(var i=0; i<storedAcc.accs.length; i++){
      // 这里用外层的acc取用户提交的账号密码,和存储的账号对比
      if(storedAcc.accs[i].username == acc.username && storedAcc.accs[i].password == acc.password){
        authenticated = true;
        break;
      }
    }

    if(authenticated){
      res.sendFile(path.join(__dirname, '/public/homepage.html'));
    } else {
      res.send("fail");
    }
  });
});

接下来是Cannot GET /login的问题:
这个提示说明浏览器向/login发送了GET请求,但你只定义了POST方式的/login路由,Express找不到对应的处理逻辑,就返回了404错误。

常见的触发场景有两种:

  • 你直接在浏览器地址栏输入/login,这默认是GET请求,而你没有写处理GET请求的/login路由;
  • 登录成功后,浏览器地址栏会变成/login(因为是POST请求的响应),如果此时你刷新页面,部分浏览器可能会误发GET请求到/login。

所以建议你补充一个GET方式的/login路由,用来显示登录表单:

app.get('/login', function(req, res) {
  // 这里返回你的登录表单页面
  res.sendFile(path.join(__dirname, '/public/login.html'));
});

另外还有两个小细节要注意:

  1. 别忘了引入path模块,还要解析表单数据,否则req.body会是undefined:
const path = require('path');
const fs = require('fs');
const express = require('express');
const app = express();

// 解析urlencoded格式的表单数据
app.use(express.urlencoded({ extended: true }));
  1. 确认homepage.html的路径是对的,确保__dirname + '/public/homepage.html'这个路径下确实存在该文件。

备注:内容来源于stack exchange,提问作者Toucdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:55:28