首页 > 解决方案 > 在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>

标签: javascriptnode.jsexpressheroku

解决方案


错误消息说dataundefineddata来自这里:

fs.readdir('./data', function(error, filelist){
    res.render('index', {data: filelist})

如果filelist是,undefined那么可能有一个值error是您没有查看的,它将告诉您有关该问题的更多详细信息。

很可能,./data不会解析到您认为应该的位置(因为当前工作目录不同)。通常在以这种风格编写代码时,人们会通过将相对路径附加到__dirname.

如果我的代码有 typeError,localhost 也不应该工作吗?

由于您在不同的计算机上运行代码,具有不同的文件系统,因此不一定遵循(在这种情况下,显然没有)。


推荐阅读