Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8844

【Node.js×PostgreSQL】ExpressとPostgreSQLでローカル環境のAPIサーバーを構築する

$
0
0

自分の環境

・Windows10
・Docker
・Docker-composer
・Node.js 10.15.3

やりたいこと

DockercomposerでPostgresとExpressを使用して、ローカル環境にAPIサーバーを作る。

とりあえず、Docker-Composer書く

docker-composer.yaml
version:'3.7'services:api:image:'node:12-alpine'volumes:-'./:/api:cached'working_dir:'/api'environment:HOST:'0.0.0.0'ports:-'3000:3000'command:'sh-c"npminstall&&npmrunstart"'db:image:postgres:12-alpinerestart:alwaysenvironment:POSTGRES_PASSWORD:postgresPOSTGRES_USER:postgresPOSTGRES_DB:postgresDATABASE_HOST:localhostports:-"5432:5432"volumes:-./migration:/docker-entrypoint-initdb.d

npmで必要なものをいろいろ入れる

・Express
・pg

npm init
npm install Express pg

とりあえず、ローカルでExpressが上手く動いているか確認する

node index.js

localhost:3000にアクセスする。Hello World!って表示されたらOK!

Expressのルーティングをいじってみる

index.js
constexpress=require('express')constapp=express()app.get('/',(req,res)=>res.send('Hello World!'))app.get('/user',(req,res)=>res.send('Got a PUT request at /user'));app.get('/hoge',(req,res)=>res.send('ほげほげ'));app.listen(3000,()=>console.log('Example app listening on port 3000!'))

localhost:3000/userにアクセスしてみて、Got a Put~って書いてあればOK。
他にもルーティングを足したい時はhogeのように足していく。

ExpressとPostgreSQLを接続させる

index.js
constexpress=require('express')constapp=express()const{Pool,Client}=require('pg')constconnectionString='postgres://postgres:postgres@db:5432/postgres'constpool=newPool({connectionString:connectionString,})pool.query('SELECT NOW()',(err,res)=>{console.log(err,res)pool.end()})app.get('/',(req,res)=>res.send('Hello World!'))app.get('/user',(req,res)=>res.send('Got a PUT request at /user'));app.listen(3000,()=>console.log('Example app listening on port 3000!'))

ログでSELECT NOW()のクエリの結果が表示されていればOK!

マイグレーション用のSQLを作成する

今のままだと、DBに何も入っていないので、テーブル作成用のSQLを作成し、Docker-compose up時に自動でSQL文を実行させるようにする。

/migration/migration.sql
CREATETABLECompany(idserial,nametextNOTNULL,descriptiontextNOTNULL,PRIMARYKEY(id));INSERTINTOresume(name,description)VALUES('株式会社〇〇''老舗のIT系の会社。人材派遣も行っている',),('△△株式会社''人材系の会社。自社開発は行っていない',),('株式会社✖✖''最近設立したばかりの伸び盛りのIT系ベンチャー企業',);

こんな感じで、ファイルを作成し、docker-compose upをすると、Companyテーブルとレコードが追加されます。

実際にレコードが追加されたことを確かめるために、index.jsを修正します。

index.js
constexpress=require('express')constapp=express()const{Pool,Client}=require('pg')constconnectionString='postgres://postgres:postgres@db:5432/postgres'constpool=newPool({connectionString:connectionString,})pool.query('SELECT NOW()',(err,res)=>{console.log(err,res)pool.end()})//idの箇所に数字を入れることで、パラメータを渡すことができる。company/10//みたいな感じで渡すと、10を受け取ることができる。//Laravelのルーティングの中に処理を書くイメージだと思われる。(本当はもっといい方法がありそう)// app.post('/company/:id',(req,res)=> //     res.send(req.param('id') + ":POSTデータのお返しです!")// );/*
URL設計
/company⇒Companyの全件取得
/company/:id⇒Companyテーブルのidに応じたレコードの取得
*/app.get('/company',(req,res)=>{constclient=newClient({connectionString:connectionString,})client.connect()client.query('SELECT * FROM Company',(err,result)=>{res.send(result.rows);client.end()})});app.get('/company/:id',(req,res)=>{constclient=newClient({connectionString:connectionString,})client.connect()//idを使ってクエリclient.query({name:'fetch-user',text:'SELECT * FROM Company WHERE id = $1',values:[req.param('id')]},(err,result)=>{res.send(result.rows);client.end()})});app.listen(3000,()=>console.log('Example app listening on port 3000!'))

localhost:3000/companyでテーブルの中身が全件表示されて、
localhost:3000/company/1で「株式会社〇〇」のレコードが表示されていれば成功です。
ちなみに、app.getのところを、app.postにすることもできます。

こんな感じで、Dockerを使用してExpressとPostgreSQLでの
API開発環境の構築が出来ました!!!


Viewing all articles
Browse latest Browse all 8844

Trending Articles