首页 > 解决方案 > 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 中定义,我不确定为什么会出现此错误。任何帮助,将不胜感激。

标签: node.jslinuxexpressdynamicejs

解决方案


您应该将listnames局部变量传递给res.render()这样的方法:

res.render('/home/debian/public/views/pages/index.ejs', {
  listnames
});

然后你可以listnames在你的 EJS 模板中使用变量。


推荐阅读