簡體   English   中英

在 heroku 上部署 Nodejs Express js 應用程序

[英]Deploying Nodejs Express js App on heroku

我正在嘗試在 heroku 上部署我的應用程序,但我總是收到此錯誤

2022-08-11T12:49:12.131468+00:00 app[web.1]: Error: connect ECONNREFUSED 127.0.0.1:3306
2022-08-11T12:49:12.131469+00:00 app[web.1]: at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1247:16) {
2022-08-11T12:49:12.131470+00:00 app[web.1]: errno: -111,
2022-08-11T12:49:12.131470+00:00 app[web.1]: code: 'ECONNREFUSED',
2022-08-11T12:49:12.131470+00:00 app[web.1]: syscall: 'connect',
2022-08-11T12:49:12.131471+00:00 app[web.1]: address: '127.0.0.1',
2022-08-11T12:49:12.131471+00:00 app[web.1]: port: 3306,
2022-08-11T12:49:12.131471+00:00 app[web.1]: fatal: true
2022-08-11T12:49:12.131472+00:00 app[web.1]: }
2022-08-11T12:49:12.131494+00:00 app[web.1]:
2022-08-11T12:49:12.131494+00:00 app[web.1]: Node.js v18.7.0

有人可以幫我解決這個問題嗎? 這是 server.js

const express = require('express')
const app = express()

app.set('view engine', 'ejs')

const filterByDateRouter = require('./routes/filterByDate');
const filterByLogsRouter = require('./routes/filterByLogs');
const mainPageRouter = require('./routes/index'); 

app.use("/filterByDate", filterByDateRouter)
app.use("/filterByLogs", filterByLogsRouter)
app.use("/",mainPageRouter)
app.use(express.static(__dirname + '/public/css'))
app.use(express.static(__dirname + '/public/js'))


app.listen(process.env.PORT || 3000)

這是數據庫連接:

var connection = mysql.createPool({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  connectionLimit:10,
  database: process.env.DB_NAME,
});

我正在使用heroku中的clearMYSQL來部署我的數據庫,並且保存在.env中的所有字段都是正確的

您可以閱讀CLEARDB_DATABASE_URL並對其進行解析:

const url = new URL(process.env.CLEARDB_DATABASE_URL);
const host = url.hostname;
const port = url.port || 3306;
const user = url.username;
const password = url.password;
const database = url.pathname.substring(1);
const connection = mysql.createPool({
  host,
  user,
  password,
  connectionLimit:10,
  database,
  port
});

您正在嘗試連接到127.0.0.1 ,而 heroku 不在同一個容器上托管數據庫。 查看 heroku 文檔,您需要從配置中獲取主機,方法是:

heroku config | grep CLEARDB_DATABASE_URL

這將返回一個mysql:// -url,您應該將其添加為變量。 這也在文檔中進行了描述,並且可以通過以下方式實現:

heroku config:set DATABASE_URL='<result-of-first-command>'

更多信息可在此處獲得。

您還可以添加托管服務提供商提供的環境變量。 您還可以通過設置>配置變量在 heroku 中添加環境變量

https://i.stack.imgur.com/Qacht.png

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM