如何在EJS模板中引入依赖包?附报错代码求助
如何在EJS模板中正确引入依赖包并解决你的错误
兄弟,我来帮你搞定这个问题!首先看你代码里的明显错误——你把require写成requires了,多了个s,这肯定会触发报错的。不过就算改过来,其实也不推荐在EJS模板里直接用require加载依赖,原因有这些:
- EJS模板的核心职责是展示数据/页面逻辑,把模块加载的逻辑放在模板里会让代码耦合度变高,不利于维护;
- 如果你的EJS模板是在浏览器端渲染的(虽然EJS主打服务端渲染,但也有前端编译的场景),浏览器环境根本没有
require这个Node.js专属的函数,必然会报错; - 直接在模板里加载模块也存在一定的安全风险,比如不小心暴露了服务器端的文件系统操作权限。
正确的做法:在服务端代码中加载依赖,再传递给模板
以Express框架为例(这是EJS最常用的搭配),我们应该在Node.js的服务器代码里先引入需要的依赖,处理好数据后再把数据(或者必要的方法)传给EJS模板:
1. 服务器端代码(比如app.js)
const express = require('express'); const fs = require('fs'); // 先在这里加载fs模块 const app = express(); // 设置EJS为模板引擎 app.set('view engine', 'ejs'); app.get('/', (req, res) => { // 用fs完成你需要的操作,比如读取文件 const demoFileContent = fs.readFileSync('./demo.txt', 'utf8'); // 把处理好的数据传递给EJS模板 res.render('index', { fileContent: demoFileContent }); }); app.listen(3000, () => { console.log('服务器运行在http://localhost:3000'); });
2. EJS模板代码(比如views/index.ejs)
直接使用服务器传过来的数据即可,不用再加载模块:
<h1>文件内容展示</h1> <p><%= fileContent %></p>
特殊场景:非要在模板里用模块(不推荐)
如果你因为某些特殊需求,必须在服务端渲染的EJS模板里直接加载模块,那先修正拼写错误,把requires改成require:
<% const fs = require('fs'); %> <% const content = fs.readFileSync('./demo.txt', 'utf8'); %> <p><%= content %></p>
但再次强调,这种写法违背了模板与业务逻辑分离的原则,除非万不得已,否则不建议这么做。
内容的提问来源于stack exchange,提问作者Shubham Azad
相关产品推荐
相关产品推荐

