Node.js后端HTML表单提交报错:Cannot find module 'html'
解决Express提交表单后报错"Cannot find module 'html'"的问题
错误根源
你在app.js第41行调用res.render()渲染HTML文件时,Express默认会把.html后缀当成需要安装的模板引擎模块去查找,但它本身没有内置处理HTML文件的引擎,所以触发了找不到模块的错误。
两种解决方法
方法一:配置HTML模板引擎
用支持HTML的模板引擎(比如ejs)来处理渲染:
- 安装依赖:
npm install ejs
- 在
app.js里添加配置:
// 把ejs设为默认视图引擎,同时让Express识别.html文件 app.set('view engine', 'ejs'); app.engine('html', require('ejs').renderFile);
之后就能正常用res.render('表单页面.html')渲染页面。
方法二:直接返回静态HTML文件
如果不需要动态渲染,用res.sendFile()替代res.render(),注意要传入文件的绝对路径:
// 先引入path模块 const path = require('path'); // 返回表单页面 res.sendFile(path.join(__dirname, 'views', '表单页面.html'));
额外注意项
- 确认你的HTML文件放在Express的
views目录下(默认是项目根目录的views文件夹),如果改了目录路径,要提前用app.set('views', '你的自定义目录')配置好。 - 处理表单提交的路由里,要等MongoDB数据存储完成后再执行页面返回/渲染操作,避免异步逻辑导致的顺序错误。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

