跳至主要内容

[Express] 整合 postgreSQL 與 heroku

前置動作

# 安裝 pg 套件
$ npm install pg

# 在 heroku 上新增 postgreSQL 的 database
$ heroku addons:create heroku-postgresql:hobby-dev

Sequelize Config 設定

設定 Express 專案中 Sequelize 的 config

// config/config.json
{
//...
"production": {
"use_env_variable": "DATABASE_URL",
"protocol": "postgres",
"dialect": "postgres",
"dialectOptions": {
"ssl": {
"require": true,
"rejectUnauthorized": false
}
}
}
}
  • 透過 heroku 產生 PostgreSQL 的資料庫後,在 Heroku 的環境變數中會自動把 DATABASE_URL 帶入 postgreSQL 資料庫的 URI,因此在設定檔中可以不用填寫帳號密碼,直接使用 use_env_variable: "DATABASE_URL"
  • dialectOptions.ssl 中有一個 rejectUnauthorized 選項,在未設定 SSL 前需要使用這個選項。如果沒有加上這個選項的話,在 node-postgres^8.0.0 之後會出現 SequelizeConnectionError: self signed certificate

修改 port

發佈到 heroku 後,它會透過環境變數來告知我們要使用那一個 port,因此不能像開發環境時一樣使用 3000

// app.js
const port = process.env.PORT || 3000; // heroku 會自動給 process.env.PORT

建立 database

在 heroku 上建立 postgresql 時,資料庫會一併被建立,因此只需要進行 migrate 和 seed 的動作:

$ heroku run npx sequelize db:migrate
$ heroku run npx sequelize db:seed:all