中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【node.js】 + 【express】を使ってJsonファイルをPOSTで受け取りレスポンスを返すサーバーを構築する

1.概要

簡易的なPOSTサーバーを構築します。
クライアント側からWEBサーバーへJsonファイルをPOSTすると
そのままJSONファイルが返ってくるというものです。
webサーバーは【node.js】 + 【express】を使い、OSは【CentOS7】としました。

2.サーバーの環境を構築する

まずは【node.js】をインストールします。

[root@localhost ~]# yum install wget
[root@localhost ~]# wget https://nodejs.org//dist/v9.9.0/node-v9.9.0-linux-armv7l.tar.xz 
[root@localhost ~]# tar -xvf node-v9.9.0-linux-armv7l.tar.xz 
[root@localhost ~]# cd node-v9.9.0-linux-armv7l
[root@localhost node-v4.0.0-linux-armv7l]# cp -R * /usr/local/

インストールが完了したら作業フォルダを作成します。
作業フォルダは【/home/myapp】としました。

[root@localhost /]# cd home
[root@localhost home]# mkdir myapp


作業用フォルダに移動して
このフォルダでプロジェクト開始!ということを【npm】に教えます。

[root@localhost home]# cd myapp
[root@localhost myapp]# npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install ` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (myapp)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /home/myapp/package.json:

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes) y


次に【express】をインストールします。

[root@localhost ~]# npm install express --save
  1. express@4.17.1
added 50 packages in 13.328s


【express】コマンドを動くようにします。

[root@localhost home]# npm install -g express-generator
/usr/local/bin/express -> /usr/local/lib/node_modules/express-generator/bin/express-cli.js
  1. express-generator@4.16.1
added 10 packages in 6.459s

これで環境の構築は完了です。

3.app.jsを作成する

【/home/myapp】に移動して【app.js】を作成します。
コードは下記のとおりです。

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

// application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.listen(3000);
console.log('Start.');

app.post('/', function(req, res) {
    console.log(req.body);
    res.json(req.body);
})

4.app.jsを動かす

下記のコマンドを実行します。

[root@localhost myapp]# node app.js
Start.

問題なく動作したので、JsonファイルをPOSTしてみます。
その前にファイアーウォールに穴を空ける必要がありますので
ポート3000に穴を空ける設定をします。

5.ファイアーウォールを設定する

ポート3000がとおるように設定します。

[root@localhost ~]# firewall-cmd --permanent --add-port=3000/tcp
success


ファイアーウォールを再起動します。

[root@localhost ~]# systemctl restart firewalld.service


再起動が完了したらfirewallの状態を確認します。

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client http
  ports: 22/tcp 25/tcp 3000/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

6.JsonファイルをPOSTする

早速JsonファイルをPOSTしてみます。
今回は
【Advanced REST client(ARC)】
を使って送ってみます。

POSTするJsonは下記のとおりです。

{
  "Job":"プログラマー",
  "Age":"37"
}


POST結果は下記のとおりです。
【ARC】
f:id:tsu--kun:20190808100336p:plain


【CentOS】

[root@localhost myapp]# node app.js
Start.
{ Job: 'プログラマー', Age: '37' }