提问人:rimi 提问时间:11/15/2023 最后编辑:rimi 更新时间:11/16/2023 访问量:32
带有 Express 的 nodejs 和 ubuntu 和 rasbian 上的 EJS 不同
nodejs with express and ejs different on ubuntu and rasbian
问:
我想在 Node.js 上使用 Express 和 EJS 构建一个小日历。我从我的笔记本电脑(Ubuntu)开始,一切运行良好。
之后,我将项目克隆到我的 Raspberry 上,它将在我的家庭网络中为这个小型 Web 服务器提供服务。但是它抛出了一个错误,即使它抱怨的对象内部的“数据”也存在。
index.ejs:
<!DOCTYPE HTML>
<html>
<head>
<title>Little Advent Calendar</title>
<link rel="stylesheet" type="text/css" href="/main.css" />
</head>
<body class="background">
<div class="center">
<section >
<h2 class="title" align="center"> <%= day %>. Dezember</h2>
<p class="btn-style" align="center">
<a href="/<%= day %>" type="button" class="a-btn">Öffnen</a>
</p>
</section>
</div>
</body>
</html>
服务器.js(运行 Web 服务器):
...
app.use(express.static(path.join(__dirname, '/public/')));
app.set('view engine', 'ejs');
app.use(express.urlencoded({ extended: false }));
app.use(methodOverride('_method'));
app.get('/', async(req, res) => {
let date_ob = new Date();
let day = date_ob.getDate();
res.render('main/index', {"day": day});
})
app.listen(port);
在两台计算机上,网页看起来相同。包括日期(日期)通过从服务器 .js 传递的 JSON 对象正确显示。
但是在我的 Raspberry 上,它抛出以下错误,它没有完全崩溃,但似乎那里出了点问题:
ReferenceError: /home/pi/Desktop/advent-calendar/views/main/index.ejs:10
8| <div class="center">
9| <section >
>> 10| <h2 class="title" align="center"> <%= day %>. Dezember</h2>
11| <p class="btn-style" align="center">
12| <a href="/<%= day %>" type="button" class="a-btn">Öffnen</a>
13| </p>
day is not defined
at eval ("/home/pi/Desktop/advent-calendar/views/main/index.ejs":12:26)
at index (/home/pi/Desktop/advent-calendar/node_modules/ejs/lib/ejs.js:703:17)
JSON在Node.js中为Raspberry和Ubuntu提供有什么区别吗?
这是网页的样子。它肯定是从服务器 .js 打印日期变量中的日期
答:
0赞
rimi
11/16/2023
#1
我在这里找到了问题。主要原因是浏览器在 Web 服务器上额外抓取 .
当这对我来说不是问题时,它确实是问题,因为我还实现了一条路由,通过添加以下内容来获取当天的当前数据:favicon.ico
app.get('/:day', async(req, res) => {
var dayNum = req.params.day
var day = today();
// decide the type and render the specific page
if (day.type == "number" || day.type == "Number") {
res.render('main/number', { "day": day });
} else {
// default page if nothing matches (fallback)
res.render('main/index');
}
})
插入检查是否在 url 中提供的参数而不是 favicon.ico 为我解决了它。因此,即使我还在索引页面上,浏览器也会调用此路由。
引发的错误是因为我错过了在上面的此路由中插入索引页。因此,从技术上讲,由于 favicon.ico 调用,我的索引页面被渲染了两次。第一次使用正确的值,第二次没有值。day is not defined
{ day: day }
评论
day is not defined
与提供 Raspbian 和 Ubuntu 的差异无关。我想你应该把你的目录从改成。确保两个系统上的文件夹结构和区分大小写匹配。/public/
app.use(express.static(path.join(__dirname, 'public')));
{day: day}
app.use(express.static(path.join(__dirname, 'public')));