0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

nodejs サーバ構築 チートシート

Last updated at Posted at 2020-06-25

node サーバとは

nodejsだけで構築できるので、とにかく早い
他のPCからもアクセスできる
※ポート開放をお忘れなく(EC2の場合はセキュリティグループ) σ(゚∀゚ )オレ

背景

他ベンダーの開発が遅れて、いつまでたっても接続テストが始まらないー
モック作るの面倒くさいー
、、と思ったら オー人事オー人事 nodeサーバ

node サーバ (http) チートシート

構成

├ server.js
├ package.json
└ download.txt # ダウンロード用ファイル。中身はなんでもok

server.js
'use strict';
var log4js = require('log4js');
var logger = log4js.getLogger('test');
log4js.configure({ appenders: { default: { type: "console", layout: { type: "basic" } } }, categories: { default: { appenders: ['default'], level: 'debug' }}, replaceConsole: true, level: 'info' })
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
var http = require('http');
var util = require('util');
var host = 'localhost'; 
var port = 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();
});

var server = 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 page
app.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 パラメータの参照

	let json = {
		id: req.params.id,
		name: "honya",
		dob: (new Date('2020-01-01 12:34:56')).getTime(),
	}
	res.status(201).json(json);
});

// html を返す場合 ASP.NET形式
app.all('/asp/honya.asmx', function(req,res) {
	let html = `
<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) { 
	let header = {
		'Content-disposition': 'attachment; filename=server.csv',
		'Content-type': 'text/plain; charset=utf-8',
	}
	res.header(header);

	let csv = "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 のチートシート

これらを要求されたら無駄のラッシュで切り抜けてください
無駄

nodejs SSLサーバ構築 チートシート

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?