[Node] Expressを使って最速でJSONを返す

皆さん WebAPI で JSON を返したいですよね?Node.js 環境ではjson-serverとかもあるけれど、ベーシックに Express でやってみたい。

ちなみに最速はレスポンスではなくて作業量的な意味。

Express でハロワ

とりあえずハロワ

yarn で express をインストールする。

yarn init -y
yarn add express

そしたらエントリポイントとなるファイルを作成する。とりあえずapp.jsとしとく。

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

app.get('/', (req, res) => res.send('hello world!'))

app.listen(3000, () => console.log('http://localhost:3000'))

うーん、4 行!かんたん

最後のconsole.logは無くてもいいが、アドレスを入れておくと起動後に即開けるので楽ちん

$ node app
http://localhost:3000

実行してアクセスすると。。。

$ curl http://localhost:3000
hello world!

ハロワでた!

JSON で返す

次にレスポンスが json で返るようにしよう。

やり方はresponseオブジェクト(下記ではres)にContent-Typeを設定すれば良い。

app.get('/', (req, res) => {
res.header('Content-Type', 'application/json; charset=utf-8')
res.send('{ "message": "hello world!" }')
})

これも実行すると。。。

$ node app
http://localhost:3000

$ curl http://localhost:3000
{ "message": "hello world!" }

json キタ!

URI にパラメータをつける

パラメータありのリクエストにも対応しよう

http://localhost:3000/<name>として name に入れた名前でhello <name>!と返るようにしてみる。

以下のコードを追加する。

app.get('/:name', (req, res) => {
res.header('Content-Type', 'application/json; charset=utf-8')
res.send({ message: `hello ${req.params.name}` })
})

get の URI 指定に:<パラメータ>と記述することでパラメータと認識され、req.params.<パラメータ>で取り出すことができる。

また、res.sendにはオブジェクトをそのままぶち込める。これでもレスポンスは JSON にパースしてくれるので便利だ。

これを実行すると。。。

$ node app
http://localhost:3000

$ curl http://localhost:3000/hoge
{ "message": "hello hoge" }

イケるね!

参考

実行環境

  • Node 8.11.3
  • Express 4.16.4