node サーバとは
nodejsだけで構築できるので、とにかく早い
他のPCからもアクセスできる
背景
他ベンダーの開発が遅れて、いつまでたっても接続テストが始まらないー
モック作るの面倒くさいー
、、と思ったら オー人事オー人事 nodeサーバ
node サーバ (http) チートシート
構成
- server.js
- package.json
server.js
'use strict';varlog4js=require('log4js');varlogger=log4js.getLogger('test');log4js.configure({appenders:{default:{type:"console",layout:{type:"basic"}}},categories:{default:{appenders:['default'],level:'debug'}},replaceConsole:true,level:'info'})varexpress=require('express');varapp=express();varbodyParser=require('body-parser');app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:false}));varhttp=require('http');varutil=require('util');varhost='localhost';varport=8000;app.use(function(req,res,next){logger.info('%s %s',req.method,req.url);logger.info('header='+JSON.stringify(req.headers));logger.info('query='+JSON.stringify(req.query));logger.info('body='+JSON.stringify(req.body));next();});varserver=http.createServer(app).listen(port,function(){});console.log('*** server start http://%s:%s ***',host,port);logger.info('*** server start http://%s:%s ***',host,port);server.timeout=30000;process.env['NODE_TLS_REJECT_UNAUTHORIZED']=0;// オレオレ証明書サーバへリクエストする場合// top pageapp.all('/',function(req,res){// methodを限定しないres.header({'Content-type':'text/html'});res.end(util.format('<h1>http://%s:%s for honya</h1>',host,port));// サーバの用途が分かるようなタイトルを表示する});// json を返す場合 REST形式app.all('/rest/v1/user/:id',function(req,res){logger.info('id='+req.params.id);// url パラメータの参照letjson={id:req.params.id,name:"honya",dob:(newDate('2020-01-01 12:34:56')).getTime(),}res.status(201).json(json);});// html を返す場合 ASP.NET形式app.all('/asp/honya.asmx',function(req,res){lethtml=`
<html>
<body>
<h1>request url: ${req.method}${req.url}</h1>
<div>response</div>
</body>
</html>
`;res.end(html);});// 存在するファイルをダウンロードする場合 cgi形式app.all('/cgi-bin/honya.cgi',function(req,res){res.download(__dirname+'/download.txt','server.log');});// csvデータをダウンロードする場合 php形式app.all('/php/honya.php',function(req,res){letheader={'Content-disposition':'attachment; filename=server.csv','Content-type':'text/plain; charset=utf-8',}res.header(header);letcsv="id,name\n1,honya\n";res.send(csv);});
package.json
{"dependencies":{"body-parser":"^1.19.0","express":"^4.17.1","log4js":"^6.3.0"}}
起動
cd ~/ # ルートフォルダへ移動
npm install# 初回のみ
node server.js
# 終了するときは Ctrl + C
常時起動
cd ~/ # ルートフォルダへ移動
npm install# 初回のみ
npm install forever -g# 初回のみ
forever start -l server.log -a server.js
# 終了するときは forever stopall # 全部止まるけど何個も立ち上げる方が悪い(笑)
あとがき
形式について
REST、ASP.NET、cgi、php のurlで4パターンのレスポンスを用意しました。
これが1ファイルで実現できるのは nodejs しかないでしょう。
接続テストができず、100近いurlを用意したことがありますが、このときはjsonを用意して、そこから値を返すようにしました。これは nodejs でなくてもできますが。
環境依存について
環境ごとに設定ファイルがあると思いますが、nodeサーバならhost以外は同じにできます。
例)honyaUrl: http://devhost:8000/v1/customer/get.asmx
(開発環境)honyaUrl: http://prodhost/v1/customer/get.asmx
(本番環境)
凡ミス多いが多い私には、こういう小っさいところが大きいです
モックだよ!
用途がモックなので無駄なことは省きました。
・複数台建てる(portを変えれば いくつでもok)
・portを消す(apache または nginx を使用する)
・チェックを入れる(methodチェック、ヘッダーチェック、入力チェックなど)
・モックから別のサービスへアクセスする(nodejs request のチートシート)