Node.js登录视图无法渲染,出现GET /login请求失败错误
解决Express中访问/login出现“无法GET /login”的问题
问题根源
- 缺少GET /login路由:当前仅定义了处理登录表单提交的
POST /login路由,但没有处理GET请求返回登录页面的路由,直接访问/login时Express找不到对应路由,返回404错误。 - 视图渲染路径错误:登录失败时的
res.render('/login')写法错误,EJS视图文件路径不需要以斜杠开头,正确写法应为res.render('login')。 - 重复挂载静态文件:代码中重复调用
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
相关产品推荐
相关产品推荐

