ES模块环境下Express配置EJS处理HTML文件:require未定义报错
解决ES模块下Express使用EJS处理HTML文件的require未定义错误
你的问题根源很明确:项目启用了ES模块("type": "module"),这种环境下不支持CommonJS的require()语法,必须使用ES标准的import来引入模块。
直接修改代码即可解决,无需更改模块类型:
- 先导入EJS模块
在文件顶部新增ES模块风格的EJS导入语句:
import ejs from 'ejs';
- 修正
app.engine的调用
把原来用require的引擎配置代码:
app.engine('html', require('ejs').renderFile);
替换为:
app.engine('html', ejs.renderFile);
- 可选优化(简化渲染代码)
取消注释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
相关产品推荐
相关产品推荐

