我已经在 Heroku 上成功部署了一个 PERN 堆栈。该应用程序在本地完美运行,但在部署时无法连接。它运行静态页面,但没有连接到 API。
错误是我收到 500 内部服务器错误。我为客户端连接 localhost:3000,为服务器连接 localhost:3001。我正在使用代理来替换我的路由的 baseURL。我已经为 Heroku 插件设置了 DATABASE_URL。同样在部署过程中,我在部署前在 Heroku 中创建了必要的表。
我曾多次尝试部署并寻找解决方案,但都没有成功。任何帮助将不胜感激。
错误:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
main.28345b5c.chunk.js:1 Error: Request failed with status code 500
at e.exports (2.09b0e732.chunk.js:2)
at e.exports (2.09b0e732.chunk.js:2)
at XMLHttpRequest.p.onreadystatechange (2.09b0e732.chunk.js:2)
DB.js:
const devConfig = `postgresql://${process.env.PG_USER}:${process.env.PG_PASSWORD}@${process.env.PG_HOST}:${process.env.PG_PORT}/${process.env.PG_DATABASE}`;
const proConfig = process.env.DATABASE_URL; //heroku addons
const pool = new Pool({
connectionString:
process.env.NODE_ENV === 'production' ? proConfig : devConfig,
});
module.exports = pool;
Server.js:
require('dotenv').config();
const cors = require('cors');
const db = require('./db');
const express = require('express');
const app = express();
const path = require('path');
const morgan = require('morgan');
const { validateData } = require('./utils/validators');
const port = process.env.PORT || 3001;
app.use(express.json());
app.use(morgan('dev'));
app.use(cors());
if (process.env.NODE_ENV === 'production') {
//server static content
//npm run build
app.use(express.static(path.join(__dirname, 'client/build')));
}
app.get('/api/v1/restaurants', async (req, res) => {
=============== Routes ==============================
Package.json:
"engines": {
"node": "12.17.0",
"npm": "7.5.2"
},
"scripts": {
"start": "node server.js",
"heroku-postbuild": "cd client && npm install && npm run build"
}
Heroku 日志
2021-02-17T05:22:57.000000+00:00 app[api]: Build succeeded
2021-02-17T05:23:05.416267+00:00 heroku[web.1]: Starting process with command `node server.js`
2021-02-17T05:23:07.507510+00:00 app[web.1]: Server is running on 11615
2021-02-17T05:23:07.843998+00:00 heroku[web.1]: State changed from starting to up
2021-02-17T05:23:52.998817+00:00 app[web.1]: GET / 200 10.670 ms - 2469
2021-02-17T05:23:53.148888+00:00 app[web.1]: GET /static/js/main.28345b5c.chunk.js 200 1.092 ms - 15240
2021-02-17T05:23:53.152708+00:00 app[web.1]: GET /static/js/2.09b0e732.chunk.js 200 1.234 ms - 184584
2021-02-17T05:23:52.997093+00:00 heroku[router]: at=info method=GET path="/" host=restaurant-finder-1.herokuapp.com request_id=2f69d145-9c3b-4758-a9c3-b44e98b25d7e fwd="154.20.117.96" dyno=web.1 connect=0ms service=17ms status=200 bytes=2790 protocol=https
2021-02-17T05:23:53.153700+00:00 heroku[router]: at=info method=GET path="/static/js/main.28345b5c.chunk.js" host=restaurant-finder-1.herokuapp.com request_id=f25e4d0e-dd3f-45f2-84c5-234aab40e933 fwd="154.20.117.96" dyno=web.1 connect=0ms service=7ms status=200 bytes=15576 protocol=https
2021-02-17T05:23:53.754192+00:00 heroku[router]: at=info method=GET path="/api/v1/restaurants" host=restaurant-finder-1.herokuapp.com request_id=13f4dbdb-b41d-4a17-be22-9957cfe35dbc fwd="154.20.117.96" dyno=web.1 connect=1ms service=21ms status=500 bytes=396 protocol=https
2021-02-17T05:23:53.752767+00:00 app[web.1]: GET /api/v1/restaurants 500 18.514 ms - 137
2021-02-17T05:23:54.028676+00:00 heroku[router]: at=info method=GET path="/manifest.json" host=restaurant-finder-1.herokuapp.com request_id=679b77b1-cad8-43a8-a9be-e72e3af326c2 fwd="154.20.117.96" dyno=web.1 connect=0ms service=3ms status=200 bytes=819 protocol=https