node.js - EJS 部署问题,“未定义列表名称”
问题描述
我在这里指的是这份文件:https ://www.freecodecamp.org/news/develop-deploy-first-fullstack-web-app/#nextsteps
昨天在您的帮助下,我能够成功部署一个静态网站。现在我正在尝试部署一个动态网站。我按照链接中的文章所述移动并命名了所有文件。
我的文件结构是这样的:
ls -l
total 52
drwxr-xr-x 3 debian debian 4096 Apr 18 02:55 Concept
drwxr-xr-x 67 debian debian 4096 Apr 19 22:50 node_modules
-rw-r--r-- 1 debian debian 305 Apr 19 22:49 package.json
-rw-r--r-- 1 debian debian 18488 Apr 19 22:49 package-lock.json
drwxr-xr-x 4 debian debian 4096 Apr 18 02:55 pictures
-rw-r--r-- 1 debian debian 568 Apr 20 00:01 server.js
-rw-r--r-- 1 debian debian 4621 Apr 18 02:55 styles.css
drwxr-xr-x 4 debian debian 4096 Apr 19 22:56 views
然后我有这个
$ ls -l views/pages
total 8
-rw-r--r-- 1 debian debian 5231 Apr 19 23:40 index.ejs
还有这个
$ ls -l views/partials
total 4
-rw-r--r-- 1 debian debian 1083 Apr 19 23:05 so_header.ejs
server.js 的内容是这样的:
// Load Node modules
var express = require('express');
const ejs = require('ejs');
// Initialize Express
var app = express();
// Render static files
app.use(express.static('/home/debian/public'));
// Set the view engine to ejs
app.set('view engine', 'ejs');
// Port website will run on
app.listen(8080);
// *** GET Routes - Display Pages ***
// Root Route
app.get('/', function(req, res){
var listnames = ["Aras", "Songul", "Nafiz"];
// Render index page
res.render('/home/debian/public/views/pages/index.ejs', {
// EJS variable and server side variable
});
});
因此,当我使用 npm start 命令和浏览器初始化服务器时,当我编写并按 Enter 键时
http://myVpsIP:8080/
它给出了一个类似这样的错误:
ReferenceError: /home/debian/public/views/pages/index.ejs:44
42|
43| <% include('/home/debian/public/views/partials/so_header') %>
>> 44| <% listnames.forEach(function(name){ %>
45| <p><%= name %></p>
46| <% }); %>
47|
listnames is not defined
at eval (eval at compile (/home/debian/public/node_modules/ejs/lib/ejs.js:662:12), <anonymous>:15:8)
at index (/home/debian/public/node_modules/ejs/lib/ejs.js:692:17)
at tryHandleCache (/home/debian/public/node_modules/ejs/lib/ejs.js:272:36)
at View.exports.renderFile [as engine] (/home/debian/public/node_modules/ejs/lib/ejs.js:489:10)
at View.render (/home/debian/public/node_modules/express/lib/view.js:135:8)
at tryRender (/home/debian/public/node_modules/express/lib/application.js:640:10)
at Function.render (/home/debian/public/node_modules/express/lib/application.js:592:3)
at ServerResponse.render (/home/debian/public/node_modules/express/lib/response.js:1012:7)
at /home/debian/public/server.js:17:6
at Layer.handle [as handle_request] (/home/debian/public/node_modules/express/lib/router/layer.js:95:5)
列表名称已经在 server.js 中定义,我不确定为什么会出现此错误。任何帮助,将不胜感激。
解决方案
您应该将listnames
局部变量传递给res.render()
这样的方法:
res.render('/home/debian/public/views/pages/index.ejs', {
listnames
});
然后你可以listnames
在你的 EJS 模板中使用变量。
推荐阅读
- python - 在 Python 中删除 DataFrame 中值的子字符串
- javascript - 将日期发送到views.py后如何更新django模板
- python - 避免for循环使用numpy通过索引值将数组拆分为多个数组
- constants - q/kdb - 在函数内向字典添加新的键值分配时遇到“常量错误”
- python - 如何使用python中的字符串列表在段落中进行精确匹配
- linux - 有没有办法使用像 Sysdig 这样的系统来识别 Linux 信号处理的开始?
- python - 如何在熊猫中用字符串值替换 NaN
- python - 比较两个输入值(投票系统)python
- qt - 错误的编码 (utf 8 -> iso-8859-1) 使用带有 webassembly 的 Qt qml 文本字段进行复制粘贴
- bash - Bash 参数扩展 - 获取目录路径的一部分