diadia

興味があることをやってみる。自分のメモを残しておきます。

nodejs expressでhttps通信を開発環境でできるようにするう

参考資料:

djangoの開発環境でhttps通信させるのが面倒そうだったのでnodejsでhttps通信できる環境を調べたところ案外かんたんにできそうなのでこちらを試してみた。 これにはcognitoを使う場合https通信をしないと認証できないことを知った背景がある。。。

手順

1.開発準備

// projectディレクトリを作成する
mkdir nodejs_https_sample
cd nodejs_https_sample

// package.json等作成
npm init

// expressをインストール
npm install express

2. http通信対応するスクリプトをとりあえず作る

// ファイル名:index.js

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

app.get('/', function(req, res){ 
       res.send('Hello World!')
   }
)

app.listen(port, () => console.log(`Listening on port ${port}!`))

この状態だとhttp://localhost:3000/にアクセスすればHello Worldが表示されるが、 https://localhost:3000/にアクセスすると表示できない。これをできるようにするには以下の手順を実行する。

3. httpsに対応させる

1.証明書を作成する

// プロジェクトルート以下にcertディレクトリを作成する
mkdir cert
cd cert

certディレクトリ以下に privatekey.pemとcert.pemを作成する。

openssl req -x509 -newkey rsa:2048 -keyout privatekey.pem -out cert.pem -nodes -days 365

このコマンドについてはこちらを参照するとよい。 https://reffect.co.jp/node-js/node-js-https#i

2.index.jsを修正する

// index.js 
// 以下のように書き換える

const express = require('express')
const app = express()
const port = 3000
const fs = require('fs');
const option = {
    key: fs.readFileSync('./cert/privatekey.pem'),
    cert: fs.readFileSync('./cert/cert.pem'),    
}
const server = require('https').createServer(option, app)

app.get('/', (req, res) => res.send('Hello World!'))

server.listen(port, () => console.log(`Listening on port ${port}!`))