Node.js(Express)とPostgreSQLを使ってChatアプリを作る。第2回(全4回)
はじめに
・Node.jsとExpressのインストール編
・PostgreSQLインストール&Node.jsとdatabase接続編
・詳細ページの作成と非同期処理について
・ユーザー登録の機能
コピペ禁止です。
コマンド、コードはコピぺしないで作成してください。
気になった用語があれば各自で調べてください。
PostgreSQLをインストール
PostgreSQLのインストール
PostgreSQL(ポストグレスキューエル)はオープンソースのリレーショナルデータベース管理システム(RDBMS)です。
簡単に言えばDBを管理するシステムです。
詳しくはWikipediaを参照してください。
https://ja.wikipedia.org/wiki/PostgreSQL
PostgreSQL
PostgreSQLを起動します。(Mac)
$ brew services start postgres
$ psql postgres
PostgreSQLを起動します。(Windows)
SQL Shell (psql)を起動します。
接続時に、パスワード以外、各質問に対して何も入力せずにenterキーを押してください。
postgres=#
が表示されたら、コマンドを入力することができます。
データベースを作成します。
CREATE DATABASE chat_db;
データベースに接続します。
\c chat_db;
テーブルを作成します。
テーブル名:channel
カラム | 型 | NOT NULL | PRIMARY KEY |
---|---|---|---|
channel_id | SERIAL | ○ | ○ |
title | VARCHAR(255) | ○ | |
created_at | TIMESTAMP | ○ |
テーブル名:message
カラム | 型 | NOT NULL | PRIMARY KEY |
---|---|---|---|
messages_id | SERIAL | ○ | ○ |
channel_id | INTEGER | ○ | |
message | TEXT | ○ | |
created_at | TIMESTAMP | ○ |
Node.jsとデータベースを接続
HTML側でフォームを作る
まず、views/index.ejs
を変更します。
<!-- 中略 -->
<body>
<div class="wrapper">
<form action="/" method="post" class="board-form">
<input type="text" name="title" class="input" placeholder="タイトル" required>
<button type="submit" class="submit">作成</button>
</form>
</div>
</body>
<!-- 中略 -->
form
のaction
というのはリクエストを送るURL、今回だと/
form
のmethod
というのはリクエストを送るときの形式、今回はpost
フォームからリクエストを受け取とる
routes/index.js
を以下のように書き換えます。
// 中略
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/', function(req, res, next) {
var title = req.body.title;
console.log(title);
});
// 中略
フォームから送られたリクエストをreq.body.[name属性]
この形で取得することができます。
今回だとindex.ejs
に記述したinputダグのname属性はtitleなのでreq.body.title
で取得できます。
そのパラメータをconsole.log
でターミナルに出力といった流れの処理を書いています。
フォームに値を入力して作成のボタンを押した後にサーバーで値が取得されているか見てみてください。
day.jsを使って日付を取得します。
テーブルに日付を入れる場所を作成し、型にDATETIME型を選択したので、
DATETIME型になるようにフォーマットをしてきますが課題1でやった感じのを作るのナンセンスなので日付用のライブラリday.jsを使います。
$ npm i -S dayjs
だいぶ省略して書いていますが、やっていることはnpm install --save moment
と同じです。
routes/index.js
var express = require('express');
var router = express.Router();
var dayjs = require('dayjs'); // 追加
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/', function (req, res, next) {
var title = req.body.title;
var createdAt = dayjs().format('YYYY-MM-DD HH:mm:ss'); // 追加
console.log(title);
console.log(createdAt); // 追加
});
module.exports = router;
npm i -S dayjs
でインストールしたライブラリはvar dayjs = require('dayjs')
で使用することができます。
そしてvar createAt = dayjs().fromat('YYYY-MM-DD HH:mm:ss');
で
DATETIME型の現在時刻が取得できます。
ターミナルに2020-12-24 22:22:22
感じ時刻が取得できればOKです。
データベースと接続しよう
Node.jsでデータベースに接続するためにはライブラリが必要です。今回使うのはPostgreSQLなのでPostgreSQLのライブラリを入れます。
$ npm i -S pg
これでPostgreSQLライブラリを使う準備はできましたが、接続するための関数はさまざまな箇所で使いたいので
汎用的な関数にしないといけないのでdbConnection.js
を作ってそれをroutes/index.js
でrequireできるように実装しましょう。
汎用的なデータベース接続モジュールを作成
dbConnection.js
を作成。
var pg = require('pg');
var dbConfig = new pg.Pool({
database: 'chat_db',
user: 'Postgre', // 変更してたらここ変えないとエラーでる
password: '', // 設定していたら記述する
host: 'localhost',
port: 5432,
});
module.exports = dbConfig;
momentでも記述したようにvar pg = require('pg');
をします。
new pg.Pool()
でデータベースの情報をオブジェクトにして引数に渡しmodule.express
で外部から
require('../dbConnection')
で呼び出せるようにしています。
データベースにデータを入れてみよう
routes/index.js
を書き換える。
// 中略
var dayjs = require('dayjs');
var pool = require('../dbConnection'); // 追加
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/', function(req, res, next) {
var title = req.body.title;
var createdAt = dayjs().format('YYYY-MM-DD HH:mm:ss');
var query = "INSERT INTO channel (title, created_at) VALUES ('" + title + "', " + "'" + createdAt + "')"; //追加
pool.connect(function (err, client) {
client.query(query, function (err) {
res.redirect('/');
});
});
});
module.exports = router;
var pool = require('../dbConnection');
このようにするとrequireで呼び出すことができます。
client.query();
について説明します。client
のquery
メソッドは第一引数にPostgreSQLのquery、第二引数にcallback関数をとります。
この第一引数のクqueryを実行することによって、データがデータベースに蓄積されます。
そしてcallback関数が実行されます。
callback関数内ではres.redirect('/');
をしています。res.redirect()
は第一引数にURLをとります。そしてこのURLに移動するだけです。今回だと/
なのでlocalhost:3000/
に移動するだけです。
フォームに値を入力してDBに入力した値が入っていればOKです。
今回は以上です、次はデータの取得をしていきます。
Author And Source
この問題について(Node.js(Express)とPostgreSQLを使ってChatアプリを作る。第2回(全4回)), 我々は、より多くの情報をここで見つけました https://qiita.com/tataboo/items/48be5496891898a25c1a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .