はじめに
店舗予約の受付をするLineBotの開発をするために
Node.js(express)を開発言語にしました。
PostgresSQLでDB作成をしたさいに
SSL接続が原因でエラーとバトルした件について解説します。
少しでもお役に立てれば幸いです。
誤った情報だと感じましたら教えてください!
開発環境
(1)macOS 10.15.7
(2)Node.js 12.19.0
(3)express 4.17.1
(4)line/bot-sdk" 7.2.0
(5)Postgres 8.5.1
(6)Heroku
エラー内容
index.js
const { Client } = require('pg');
//Postgres環境変数を設定//
const connection = new Client({
user: process.env.PG_USER,
host: process.env.PG_HOST,
database: process.env.PG_DATABASE,
password: process.env.PG_PASSWORD,
port: ****
});
connection.connect();
//クエリ文//
const userTable = {
text:'CREATE TABLE IF NOT EXISTS users (id SERIAL NOT NULL, line_uid VARCHAR(255), display_name VARCHAR(255), timestamp VARCHAR(255), trigger SMALLINT, remedy SMALLINT, pelvis SMALLINT);'
};
//クエリを実行するためのコード//
connection.query(userTable)
.then(()=>{
console.log('table users created successfully!!');
})
.catch(e => console.log(e));
テーブルができているか確認をするために
ターミナル
$ heroku pg:psql
データベースモードになったら
ターミナル
DATABASE=> select * from users;
ここで怒られます。 orz
ターミナル
ERROR: relation "users" does not exist //"users"との関係性がありません
LINE 1: select * from "users";
((((;゚Д゚)))))))
解決策
エラー文を検索しても出てくる記事が
1、select * from "users"とダブルクォーテーションで囲め!!
2、大文字と小文字が〜〜〜
など変更しても解決にならず。
どうしても分からず質問したところ
Postgres環境変数を修正しましょう!!これで解決できます!!と素敵なアドバイスをもらいました♫
index.js
//Postgres環境変数を設定//
const connection = new Client({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false //SSL接続なくても許可するよーと宣言
}
});
connection.connect();
コードの変更をしたので確認します!!!
先程と同じようにデータベースモードにします。
ターミナル
$ heroku pg:psql
ターミナル
DATABASE=> select * from users;
上記にコードを修正した結果
↓
ターミナル
ファイル名::DATABASE=> select * from users;
id | line_uid | display_name | timestamp | trigger | remedy | pelvis
----+----------+--------------+-----------+---------+--------+--------
(0 rows)
おけ👍
考察
今回のエラーはSSL接続が許可されておらず認証されないことによって起きたと考えています。
(1)最近仕様が変更になった出来事なのか?
(2)SSL接続がデフォルトに変更されたのか?
参考文献が見つからず原因がわかる方がいらっしゃいましたら、ご教授ください。