REST API を Node.js と Express で作ってみる (1)

環境は Ubuntu 18.04 になりました〜w

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

Node はインストール済み(前の記事)

$ node -v
v10.10.0
$ npm -v
6.4.1

さて、Node.js と Express で REST API の一番基礎的な部分を作ってみたいということでやってみました。

この記事と次の続き(2)は、基本こちらのサイトを参考にさせていただきました。

qiita.com

ただOS環境と Node.js や npm のバージョンが大きく変わっている点、またNodeモジュールをローカルインストールすることにこだわった点などが違うので、アプリの雛形を作る課程も違っています。

Express と express-generator をインストール

まずプロジェクトのDIRを作りその中で作業。 とりあえずnpm initを実行し、package.jsonを書き出しておく。

$ mkdir myapp
$ cd myapp
$ npm init

ここで Express と express-generator をローカルにインストールする。

$ npm install --save express express-generator
+ express-generator@4.16.1
+ express@4.16.4
.....................................

ubuntu-gでグローバルインストールする場合は、sudo が必要だ。また、express-generator をインストールした後でないと、expressコマンドは使えない。 だがここでは --save でアプリケーションのプロジェクトにインストールする。

Node.jsのモジュールはローカルインストールした方がいいと思う。 そのあたりの参考:

https://arui.tech/why-locally-install-is-much-better-than-globally-in-npm/arui.tech

npx コマンドを使えば、ローカルでも expressコマンドを実行できる。

$ npx express --version
4.16.1

ちなみに参考サイトのnpm5.2.0のときは、npm install -g npxnpxをあらかじめグローバルインストールしておく必要があったらしいが、今はnpmにバンドルされているため、npxの個別インストールは不要。

アプリの雛形を生成

$ npx express

  warning: the default view engine will not be jade in future releases
  warning: use `--view=jade' or `--help' for additional options

destination is not empty, continue? [y/N] y

   create : public/
   create : public/javascripts/
   create : public/images/
   create : public/stylesheets/
   create : public/stylesheets/style.css
   create : routes/
   create : routes/index.js
   create : routes/users.js
   create : views/
   create : views/error.jade
   create : views/index.jade
   create : views/layout.jade
   create : app.js
   create : package.json
   create : bin/
   create : bin/www

   install dependencies:
     $ npm install

   run the app:
     $ DEBUG=myapp:* npm start

一度npm initした際にpackage.jsonが書き出されているので「ディレクトリが空ではないけど...」の警告が出ているが上書きで進む。 この段階でのpackage.jsonの中身

{
  "name": "myapp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "jade": "~1.11.0",
    "morgan": "~1.9.1"
  }
}

express-generator は最初のインストール時に"dependencies"に記入されるのだが、この段階で消える。あくまで開発用のモジュールなので支障は無い。

npm installを実行。

$ npm install

npm が package.json を見て、node_modulesフォルダに、必要なパッケージをインストールしてくれる。

デフォルトのREST APIを実行してみる

npm startとすると、node ./bin/wwwが実行される。これは package.json の scripts に書かれたコマンドだ。

......
"scripts": {
    "start": "node ./bin/www"
  },
......
$ npm start

> myapp@0.0.0 start /home/jgb/MyCode/nodejs/myapp
> node ./bin/www

./bin/wwwスクリプトでWEBサーバを立ち上げている。

var app = require('../app');
......
var server = http.createServer(app);

ブラウザで http://localhost:3000/ にアクセスすると、

Express

Welcome to Express


と表示される。ここでアクセスされているのはファイルとしては myapp/routes/index.js

さらに、http://localhost:3000/users にアクセスすると、

respond with a resource


と表示される。

突然 users というアドレスが出てきて何?と思うが、ここでアクセスされているのは myapp/routes/users.js。自動的に作られたもの。

ほとんどデフォルトのままで/usersという2つのアドレス(ディレクトリ名)に対応する振り分け先が myapp/routes/xxxx.jsというjsファイルの実行内容と紐付けられている。 ここまでで、REST APIを作る準備はできている。

簡単w

Ctrl + C で Node.js を停止。