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

ES模块环境下Express配置EJS处理HTML文件:require未定义报错

解决ES模块下Express使用EJS处理HTML文件的require未定义错误

你的问题根源很明确:项目启用了ES模块("type": "module"),这种环境下不支持CommonJS的require()语法,必须使用ES标准的import来引入模块。

直接修改代码即可解决,无需更改模块类型:

  1. 先导入EJS模块
    在文件顶部新增ES模块风格的EJS导入语句:
import ejs from 'ejs';
  1. 修正app.engine的调用
    把原来用require的引擎配置代码:
app.engine('html', require('ejs').renderFile);

替换为:

app.engine('html', ejs.renderFile);
  1. 可选优化(简化渲染代码)
    取消注释app.set('view engine', 'html'),后续调用res.render时可以省略.html后缀,直接写res.render("index", data)。

修改后的完整代码如下:

import express from "express";
import bodyParser from "body-parser";
import ejs from 'ejs'; // 新增EJS模块导入

const app = express();
const port = 3001;

app.engine('html', ejs.renderFile); // 修正后的引擎配置
app.set('view engine', 'html'); // 可选:打开这行简化渲染时的文件后缀
app.use(express.static("public"));

const currentYear = new Date().getFullYear();

app.use(bodyParser.urlencoded({ extended: true }));

app.get("/", (req, res) => {
  const data = {
    title: "welcome page",
    year: currentYear,
  };
  res.render("index", data); // 若设置了view engine,可省略.html后缀
});

app.listen(port, () => {
  console.log(`Listening on port ${port}`);
});

这样修改后,Node就不会再抛出require is not defined的错误,同时能正常让Express把.html文件当作EJS模板处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:13:21