在EJS中调用Moment.js报错‘moment未定义’的技术求助
解决EJS中使用Moment.js报
moment is not defined的问题 嘿,我来帮你搞定这个卡壳的问题!这个报错的核心原因其实是EJS的执行环境和你引入的前端Moment.js完全不是一回事!
问题根源
你在HTML里<head>或者</body>前加的Moment.js脚本,是运行在**浏览器(客户端)里的,而EJS模板是在服务器端(Node.js环境)**执行渲染的。服务器端的Node.js根本没加载Moment模块,所以当EJS尝试调用moment()时,自然会提示“未定义”。而你在控制台能正常用moment,是因为浏览器已经加载了前端的脚本,和服务器端的EJS渲染完全无关。
解决方案步骤
要让EJS能用上Moment.js,得在服务器端配置一下:
- 先在服务器项目里安装Moment.js模块
打开终端,在你的项目根目录执行:
npm install moment
- 把Moment挂载到EJS的可访问范围内
有两种方式,选一种就行:
- 全局挂载(所有EJS页面都能直接用)
在你的服务器入口文件(比如app.js或者server.js)里添加:
const moment = require('moment'); // 挂载到app.locals,这样所有EJS模板都能直接访问moment对象 app.locals.moment = moment;
- 单个页面渲染时传入
如果只需要在某个页面用,就在渲染该页面的路由里传入moment:
const moment = require('moment'); app.get('/你的页面路由', (req, res) => { res.render('你的EJS模板文件名', { moment: moment }); });
- 简化你的EJS模板代码
现在不需要在模板里手动定义变量了,直接用就行:
<h1>Eduardo's Contact List</h1> <p>Today is <%= moment().format("MMMM Do YYYY") %></p>
额外说明
如果之后你还需要在前端JS代码里用Moment.js,页面里的<script>标签可以保留,服务器端的Moment和前端的Moment是相互独立的,不会冲突。
内容的提问来源于stack exchange,提问作者Eduardo Rodriguez
相关产品推荐
相关产品推荐

