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

Node.js登录视图无法渲染,出现GET /login请求失败错误

解决Express中访问/login出现“无法GET /login”的问题

问题根源

  1. 缺少GET /login路由:当前仅定义了处理登录表单提交的POST /login路由,但没有处理GET请求返回登录页面的路由,直接访问/login时Express找不到对应路由,返回404错误。
  2. 视图渲染路径错误:登录失败时的res.render('/login')写法错误,EJS视图文件路径不需要以斜杠开头,正确写法应为res.render('login')。
  3. 重复挂载静态文件:代码中重复调用app.use(express.static('public')),属于冗余操作,可合并为一次。

修复后的完整代码

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const User = require('./models/User'); // 假设User模块已正确引入

const app = express();

// 配置静态文件服务(仅需一次)
const staticPath = path.join(__dirname, 'public');
app.use(express.static(staticPath));

// 解析请求体
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

// 设置EJS为视图引擎
app.set('view engine', 'ejs');

// GET /login:返回登录页面
app.get('/login', (req, res) => {
  res.render('login', { error: null });
});

// POST /login:处理登录提交
app.post('/login', async (req, res) => {
  const { username, password } = req.body;

  try {
    const user = await User.loginUser(username, password);
    req.session.user = user;
    res.redirect('/');
  } catch (error) {
    res.render('login', { error: error.message });
  }
});

// GET /register:返回注册页面(可选,若需直接访问/register页面)
app.get('/register', (req, res) => {
  res.render('register', { error: null });
});

// POST /register:处理注册提交
app.post('/register', async (req, res) => {
  const { username, email, password } = req.body;

  try {
    await User.registerUser(username, email, password);
    res.redirect('/login');
  } catch (error) {
    res.render('register', { error: error.message });
  }
});

// 启动服务器(示例端口3000)
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

额外说明

  • 确保项目根目录下的views文件夹中存在login.ejs和register.ejs视图文件,EJS默认会从该目录查找视图。
  • 如果使用了用户session功能,需确保已正确配置express-session中间件(代码中未体现,按需补充)。

内容的提问来源于stack exchange,提问作者Abhiram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:25:16