javascript - 在heroku中部署时出现typeError
问题描述
这是我的第一个 node.js 项目,所以我的代码并不漂亮
它在我的本地主机中运行良好,但在 heroku 中显示“内部服务器错误”并且有一个 typeError。
对不起,我对 node 和 ejs 的理解不好,但我认为它应该可以工作,因为它在我的本地工作。如果我的代码有 typeError,localhost 也不应该工作吗?
2020-10-14T08:00:02.784507+00:00 app[web.1]: at tryRender (/app/node_modules/express/lib/application.js:640:10)
2020-10-14T08:00:02.784508+00:00 app[web.1]: at Function.render (/app/node_modules/express/lib/application.js:592:3)
2020-10-14T08:00:02.784508+00:00 app[web.1]: at ServerResponse.render (/app/node_modules/express/lib/response.js:1012:7)2020-10-14T08:00:02.784509+00:00 app[web.1]: at /app/app.js:12:13
2020-10-14T08:00:02.784509+00:00 app[web.1]: at FSReqCallback.oncomplete (fs.js:156:23)
2020-10-14T08:05:28.000000+00:00 app[api]: Build started by user apeiron242@gmail.com
2020-10-14T08:05:43.000000+00:00 app[api]: Build succeeded
2020-10-14T08:05:43.547173+00:00 app[api]: Deploy 289d8969 by user apeiron242@gmail.com
2020-10-14T08:05:43.547173+00:00 app[api]: Release v4 created by user apeiron242@gmail.com
2020-10-14T08:05:44.241905+00:00 heroku[web.1]: Restarting
2020-10-14T08:05:44.244059+00:00 heroku[web.1]: State changed from up to starting
2020-10-14T08:05:45.150298+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2020-10-14T08:05:45.244390+00:00 heroku[web.1]: Process exited with status 143
2020-10-14T08:05:46.580487+00:00 heroku[web.1]: Starting process with command `npm start`
2020-10-14T08:05:49.093416+00:00 app[web.1]:
2020-10-14T08:05:49.093443+00:00 app[web.1]: > bree-s_home@1.0.0 start /app
2020-10-14T08:05:49.093443+00:00 app[web.1]: > node app.js
2020-10-14T08:05:49.093443+00:00 app[web.1]:
2020-10-14T08:05:49.265437+00:00 app[web.1]: Our app is running on port 43655
2020-10-14T08:05:49.687092+00:00 heroku[web.1]: State changed from starting to up
2020-10-14T08:05:52.454620+00:00 heroku[router]: at=info method=GET path="/" host=breeshome.herokuapp.com request_id=3e8d3fd1-1788-43a4-96d0-a1b1b4a42ddd fwd="183.96.150.163" dyno=web.1 connect=1ms service=52ms status=500 bytes=404 protocol=https
2020-10-14T08:05:52.457522+00:00 app[web.1]: TypeError: /app/views/index.ejs:24
2020-10-14T08:05:52.457557+00:00 app[web.1]: 22| <div id="memoDate"></div>
2020-10-14T08:05:52.457558+00:00 app[web.1]: 23| <div id="list"><ul class="ol">
2020-10-14T08:05:52.457560+00:00 app[web.1]: >> 24| <% for (var i = 0; i < data.length; i++){ %>
2020-10-14T08:05:52.457560+00:00 app[web.1]: 25| <li><%= data[i] %>
2020-10-14T08:05:52.457562+00:00 app[web.1]: 26| <form id="form" action="/delete/?id=<%= data[i] %>"
2020-10-14T08:05:52.457562+00:00 app[web.1]: 27| method="post">
2020-10-14T08:05:52.457563+00:00 app[web.1]:
2020-10-14T08:05:52.457564+00:00 app[web.1]: Cannot read property 'length' of undefined
2020-10-14T08:05:52.457564+00:00 app[web.1]: at eval (/app/views/index.ejs:12:33)
2020-10-14T08:05:52.457564+00:00 app[web.1]: at index (/app/node_modules/ejs/lib/ejs.js:691:17)
2020-10-14T08:05:52.457564+00:00 app[web.1]: at tryHandleCache (/app/node_modules/ejs/lib/ejs.js:272:36)
2020-10-14T08:05:52.457565+00:00 app[web.1]: at View.exports.renderFile [as engine] (/app/node_modules/ejs/lib/ejs.js:489:10)
2020-10-14T08:05:52.457566+00:00 app[web.1]: at View.render (/app/node_modules/express/lib/view.js:135:8)
2020-10-14T08:05:52.457566+00:00 app[web.1]: at tryRender (/app/node_modules/express/lib/application.js:640:10)
2020-10-14T08:05:52.457566+00:00 app[web.1]: at Function.render (/app/node_modules/express/lib/application.js:592:3)
2020-10-14T08:05:52.457566+00:00 app[web.1]: at ServerResponse.render (/app/node_modules/express/lib/response.js:1012:7)2020-10-14T08:05:52.457568+00:00 app[web.1]: at /app/app.js:12:13
2020-10-14T08:05:52.457568+00:00 app[web.1]: at FSReqCallback.oncomplete (fs.js:164:23)
2020-10-14T08:07:41.437356+00:00 app[web.1]: TypeError: /app/views/index.ejs:24
2020-10-14T08:07:41.437366+00:00 app[web.1]: 22| <div id="memoDate"></div>
2020-10-14T08:07:41.437367+00:00 app[web.1]: 23| <div id="list"><ul class="ol">
2020-10-14T08:07:41.437368+00:00 app[web.1]: >> 24| <% for (var i = 0; i < data.length; i++){ %>
2020-10-14T08:07:41.437368+00:00 app[web.1]: 25| <li><%= data[i] %>
2020-10-14T08:07:41.437369+00:00 app[web.1]: 26| <form id="form" action="/delete/?id=<%= data[i] %>"
2020-10-14T08:07:41.437369+00:00 app[web.1]: 27| method="post">
2020-10-14T08:07:41.437370+00:00 app[web.1]:
2020-10-14T08:07:41.437370+00:00 app[web.1]: Cannot read property 'length' of undefined
2020-10-14T08:07:41.437371+00:00 app[web.1]: at eval (/app/views/index.ejs:12:33)
2020-10-14T08:07:41.437371+00:00 app[web.1]: at index (/app/node_modules/ejs/lib/ejs.js:691:17)
2020-10-14T08:07:41.437372+00:00 app[web.1]: at tryHandleCache (/app/node_modules/ejs/lib/ejs.js:272:36)
2020-10-14T08:07:41.437372+00:00 app[web.1]: at View.exports.renderFile [as engine] (/app/node_modules/ejs/lib/ejs.js:489:10)
2020-10-14T08:07:41.437373+00:00 app[web.1]: at View.render (/app/node_modules/express/lib/view.js:135:8)
2020-10-14T08:07:41.437373+00:00 app[web.1]: at tryRender (/app/node_modules/express/lib/application.js:640:10)
2020-10-14T08:07:41.437374+00:00 app[web.1]: at Function.render (/app/node_modules/express/lib/application.js:592:3)
2020-10-14T08:07:41.437374+00:00 app[web.1]: at ServerResponse.render (/app/node_modules/express/lib/response.js:1012:7)2020-10-14T08:07:41.437375+00:00 app[web.1]: at /app/app.js:12:13
2020-10-14T08:07:41.437375+00:00 app[web.1]: at FSReqCallback.oncomplete (fs.js:164:23)
2020-10-14T08:07:41.438083+00:00 heroku[router]: at=info method=GET path="/" host=breeshome.herokuapp.com request_id=4d42b3e4-b344-4c21-814d-3c59b6e3f0fd fwd="183.96.150.163" dyno=web.1 connect=2ms service=4ms status=500 bytes=404 protocol=https
2020-10-14T08:08:59.619198+00:00 app[web.1]: TypeError: /app/views/index.ejs:24
2020-10-14T08:08:59.619209+00:00 app[web.1]: 22| <div id="memoDate"></div>
2020-10-14T08:08:59.619210+00:00 app[web.1]: 23| <div id="list"><ul class="ol">
2020-10-14T08:08:59.619211+00:00 app[web.1]: >> 24| <% for (var i = 0; i < data.length; i++){ %>
2020-10-14T08:08:59.619211+00:00 app[web.1]: 25| <li><%= data[i] %>
2020-10-14T08:08:59.619212+00:00 app[web.1]: 26| <form id="form" action="/delete/?id=<%= data[i] %>"
2020-10-14T08:08:59.619212+00:00 app[web.1]: 27| method="post">
2020-10-14T08:08:59.619213+00:00 app[web.1]:
2020-10-14T08:08:59.619213+00:00 app[web.1]: Cannot read property 'length' of undefined
2020-10-14T08:08:59.619213+00:00 app[web.1]: at eval (/app/views/index.ejs:12:33)
2020-10-14T08:08:59.619214+00:00 app[web.1]: at index (/app/node_modules/ejs/lib/ejs.js:691:17)
2020-10-14T08:08:59.619214+00:00 app[web.1]: at tryHandleCache (/app/node_modules/ejs/lib/ejs.js:272:36)
2020-10-14T08:08:59.619218+00:00 app[web.1]: at View.exports.renderFile [as engine] (/app/node_modules/ejs/lib/ejs.js:489:10)
2020-10-14T08:08:59.619219+00:00 app[web.1]: at View.render (/app/node_modules/express/lib/view.js:135:8)
2020-10-14T08:08:59.619219+00:00 app[web.1]: at tryRender (/app/node_modules/express/lib/application.js:640:10)
2020-10-14T08:08:59.619220+00:00 app[web.1]: at Function.render (/app/node_modules/express/lib/application.js:592:3)
2020-10-14T08:08:59.619220+00:00 app[web.1]: at ServerResponse.render (/app/node_modules/express/lib/response.js:1012:7)2020-10-14T08:08:59.619221+00:00 app[web.1]: at /app/app.js:12:13
2020-10-14T08:08:59.619221+00:00 app[web.1]: at FSReqCallback.oncomplete (fs.js:164:23)
2020-10-14T08:08:59.619938+00:00 heroku[router]: at=info method=GET path="/" host=breeshome.herokuapp.com request_id=a6416cc6-3419-4376-8154-12ac1ef1e78f fwd="183.96.150.163" dyno=web.1 connect=1ms service=3ms status=500 bytes=404 protocol=https
2020-10-14T08:26:19.038259+00:00 app[web.1]: TypeError: /app/views/index.ejs:24
2020-10-14T08:26:19.038269+00:00 app[web.1]: 22| <div id="memoDate"></div>
2020-10-14T08:26:19.038270+00:00 app[web.1]: 23| <div id="list"><ul class="ol">
2020-10-14T08:26:19.038290+00:00 app[web.1]: >> 24| <% for (var i = 0; i < data.length; i++){ %>
2020-10-14T08:26:19.038291+00:00 app[web.1]: 25| <li><%= data[i] %>
2020-10-14T08:26:19.038292+00:00 app[web.1]: 26| <form id="form" action="/delete/?id=<%= data[i] %>"
2020-10-14T08:26:19.038293+00:00 app[web.1]: 27| method="post">
2020-10-14T08:26:19.038294+00:00 app[web.1]:
2020-10-14T08:26:19.038294+00:00 app[web.1]: Cannot read property 'length' of undefined
2020-10-14T08:26:19.038295+00:00 app[web.1]: at eval (/app/views/index.ejs:12:33)
/lib/view.js:135:8) de_modules/ejs/lib/ejs.js:691:17)
2020-10-14T08:26:19.038298+00:00 app[web.1]: at tryRender (/ap (/app/node_modules/ejs/lib/ejs.js:272:36)p/node_modules/express/l97+00:00 app[web.1]: at View.exports.renderFile [as engine] (/app/node_modules/ejs/lib/ejs.js:48ib/application.js:640:10)
2020-10-14T08:26:19.038299+00:00 app[web.1]: at Function.rendeapp/node_modules/express/lib/view.js:135:8)r (/app/node_modules/exp98+00:00 app[web.1]: at tryRender (/app/node_modules/express/lib/application.js:640:10) ress/lib/application.js:592:3) r (/app/node_modules/express/lib/application.js:592:3)
2020-10-14T08:26:19.038299+00:00 app[web.1]: at ServerResponse.render (/app/node_modules/express/lib/response.js:1012:7)2020-10-14T08:26:19.038298+00:00 app[web.1]: at tryRender (/ap2:13p/node_modules/express/lib/application.js:640:10) oncomplete (fs.js:164:23)
2020-10-14T08:26:19.038299+00:00 app[web.1]: at Function.rended=GET path="/" host=breeshome.herokuapp.com request_id=9car (/app/node_modules/express/lib/application.js:592:3) eb.1 connect=0ms service=11ms status=500 bytes=404 protocl
2020-10-14T08:26:19.038299+00:00 app[web.1]: at ServerResponse.render (/app/node_modules/express/lib/response.js:1012:7)2020-10-14T08:26:19.038300+00:00 app[web.1]: at /app/app.js:12:13
2020-10-14T08:26:19.038301+00:00 app[web.1]: at FSReqCallback.oncomplete (fs.js:164:23)
2020-10-14T08:26:19.041101+00:00 heroku[router]: at=info method=GET path="/" host=breeshome.herokuapp.com request_id=9ca99d56-b6d2-4abe-944b-32f2f375e2cc fwd="183.96.150.163" dyno=web.1
connect=0ms service=11ms status=500 bytes=404 protocol=https
这是我的 app.js。对不起 const 和 var 的混合
const express = require('express');
const app = express();
const fs = require('fs');
var bodyParser = require('body-parser'); // npm install body-parser로 먼저 설치
var urlencoddedParser = bodyParser.urlencoded({extended: false})
app.use('/assets', express.static('assets'))
app.set('view engine', 'ejs');
app.get('/', function(req, res){
fs.readdir('./data', function(error, filelist){
res.render('index', {data: filelist})
console.log(filelist)
}
)
}
)
app.post('/', urlencoddedParser, function(req, res){
fs.writeFile(`data/${req.body.item}`, 'data', function(err){
if(err){
console.log(err);
}
res.redirect(req.get('referer'));
})
}
)
app.post(`/delete`, urlencoddedParser, function(req, res){
var id = req.query.id;
fs.unlink(`data/${id}`, function(err){
if (err) throw err;{
}
}
)
res.redirect(req.get('referer'));
}
)
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Our app is running on port ${ PORT }`);
});
这是我的 index.ejs,我得到了 typeError。错误部分是“<%”所属的地方
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bree's lovely Homepage</title>
<link rel="stylesheet" type="text/css" href="assets/index.css" />
<link href="https://fonts.googleapis.com/css2?family=Sansita+Swashed:wght@300&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Nanum+Brush+Script&display=swap" rel="stylesheet">
</head>
<body>
<heading>
<h1>Bree's lovely Homepage</h1>
<div id="clock"></div>
</heading>
<P>Hi! Bree!!</P>
<h2>To-do list</h2>
<form id="toDoList" action="/" method="post">
<input type="text" name="item" id="inputText" placeholder="오늘은 무엇을 하실 건가요?"/>
<input type="submit" id="submitText" value="등록"/>
</form>
<div id="memoDate"></div>
<div id="list"><ul class="ol">
<% for (var i = 0; i < data.length; i++){ %>
<li><%= data[i] %>
<form id="form" action="/delete/?id=<%= data[i] %>"
method="post">
<input type="submit" value="삭제" name="delete" class="del">
</form></li>
<% } %>
</ul></div>
<div id="container">
<input type="image" src="../assets/pics/네이버.png" class="img" onclick="
window.open('https://www.naver.com/')
">
<input type="image" src="../assets/pics/구글.png" class="img" onclick="
window.open('https://www.google.com/')
">
<input type="image" src="../assets/pics/유튜브.png" class="img" onclick="
window.open('https://www.youtube.com/')
">
<input type="image" src="../assets/pics/다음웹툰.png" class="img" onclick="
window.open('http://webtoon.daum.net/')
">
<input type="image" src="../assets/pics/넷플릭스.png" class="img" onclick="
window.open('https://www.netflix.com/kr/')
">
<input type="image" src="../assets/pics/인스타.png" class="img" onclick="
window.open('https://www.instagram.com/?hl=ko')
">
<input type="image" src="../assets/pics/노션.png" class="img" onclick="
window.open('https://www.notion.so/')
">
</div>
<script src="../assets/clock.js"></script>
</body>
</html>
解决方案
错误消息说data
是undefined
。data
来自这里:
fs.readdir('./data', function(error, filelist){ res.render('index', {data: filelist})
如果filelist
是,undefined
那么可能有一个值error
是您没有查看的,它将告诉您有关该问题的更多详细信息。
很可能,./data
不会解析到您认为应该的位置(因为当前工作目录不同)。通常在以这种风格编写代码时,人们会通过将相对路径附加到__dirname
.
如果我的代码有 typeError,localhost 也不应该工作吗?
由于您在不同的计算机上运行代码,具有不同的文件系统,因此不一定遵循(在这种情况下,显然没有)。
推荐阅读
- python - 我正在尝试从 goodreads API 获取 json 文件,但我的代码没有读取文件
- python - 为什么撤回的事实模板仍然可用?
- php - 正则表达式在标签中获取字符串
- java - 如何在没有 VPN 应用程序的情况下在 android 中使用 firebase 库
- python - 如何最好地对齐数据标签以进行比较
- java - WEKA java中评估类中的精度或召回参数是什么
- c++ - 移动构造函数未被调用
- c++ - 信号和插槽的混淆行为取决于连接类型
- python - 在 Python 中将参数初始化为零
- github - 如何在 npm 中为 package.json 依赖项使用(环境)变量?