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

NodeJS提交EJS表单后res.render无法渲染页面问题

表单提交后无法渲染目标页面的问题修复

提交注册表单后页面仅刷新,无法跳转到verify-email页面,GET请求能正常渲染signup页面,客户端验证通过后确实会触发表单提交,但无任何报错信息。以下是问题根源和修复方案:

1. 控制器文件导出错误(核心问题)

signupController.js存在两处致命错误:

  • 错误使用逗号表达式导出函数,实际只会导出最后一个值
  • 错误导出了不存在的router对象

修复后的signupController.js:

const renderSignup = (req, res) => {
    res.render("signup");
};

const postSignupData = (req, res) => {
    res.render("verify-email");
};

// 正确导出两个控制器函数
module.exports = { renderSignup, postSignupData };

2. 路由文件导入与导出错误

  • 路由文件未导出router对象,导致服务器无法注册该路由
  • 导入控制器函数时未正确解构,拿到的不是目标函数

修复后的signupRoutes.js:

const express = require('express');
const router = express.Router();

// 解构导入控制器中的两个函数
const { renderSignup, postSignupData } = require('../controllers/signupController.js');

router.get('/', renderSignup);
router.post('/', postSignupData);

// 必须导出router,否则服务器无法识别该路由
module.exports = router;

3. 表单输入框缺少name属性(潜在问题)

express的urlencoded中间件依赖表单元素的name属性解析请求体,目前输入框只有id没有name,后续处理用户数据时会导致req.body为空。

修改signup.ejs中的表单输入框,添加name属性:

<label for="email">Email:</label>
<input id="email" name="email" type="text"><br><br>

<label for="password">Password:</label>
<input id="password" name="password" type="password"><br><br>

<label for="password">Confirm Password:</label>
<input id="confirm-password" name="confirm-password" type="password"><br><br>

4. 前端全局变量优化(可选)

当前前端代码中errorCount是全局变量,容易引发意外问题,建议改成让checkInputs函数返回错误数:

signupform.addEventListener('submit', (e) => {
    e.preventDefault();
    const errorCount = checkInputs();
    if(errorCount === 0){
        signupform.submit();
    }
});

function checkInputs () {
    const email = document.getElementById("email").value.trim();
    const password = document.getElementById("password").value.trim();
    const confirmPassword = document.getElementById("confirm-password").value.trim();

    let errorCount = 0;

    // 原验证逻辑保持不变

    return errorCount;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:10:35