msful
Version:
Web API server for micro service.
103 lines (83 loc) • 2.75 kB
JavaScript
// micro service RESTful.
//
//
module.exports.create = function (
_g, users, conf, port, timeout, contentsCacheMode,
contentsClose, args_env, msfulId, systemNanoTime) {
'use strict';
var http = require('http');
var constants = require("./constants");
var core = require("./core");
// httpCore.
var httpCore = require("./http_core");
// 正しいURLを取得.
var getUrl = function (req) {
var u = req.url;
var p = u.indexOf("?");
if (p == -1) {
return u;
}
return u.substring(0, p);
}
// プロセス例外ハンドラ.
process.on('uncaughtException', function(e) {
console.trace("error uncaughtException", e);
});
// promise例外ハンドラ.
process.on('unhandledRejection', function(reason) {
console.trace("error unhandledRejection", reason);
});
// システムパラメータを生成.
var sysParams = require("./sysparams");
sysParams = sysParams.create(
users, conf,
port, timeout, args_env, msfulId,
contentsCacheMode, contentsClose, null, null,
systemNanoTime, null
)
// システムパラメータを設定.
core.setSysParams(sysParams);
// デフォルトのモジュールを読み込む.
core.resetModules();
core.loadModules();
// exec系の展開.
var execApi = require("./exec/api").create(_g, core);
var execHtml = require("./exec/html").create(_g, core);
// HTTP実行.
var execute = function(req, res, data) {
// URLを取得.
var url = getUrl(req);
// APIアクセス.
if (url.indexOf(constants.URL_API_PATH) == 0) {
execApi.execute(req, res, url, data);
// コンテンツアクセス.
} else {
execHtml.execute(req, res, url);
}
}
// サーバー生成.
var server = http.createServer(function (req, res) {
httpCore.request(req, res, execute);
});
// タイムアウトセット.
server.setTimeout(sysParams.getTimeout());
// キープアライブタイムアウトをセット.
server.keepAliveTimeout = 2500;
// maxHeadersCountはゼロにセット.
server.maxHeadersCount = 0;
// http.socketオプションを設定.
server.on("connection", function(socket) {
socket.setNoDelay(true);
socket.setKeepAlive(false, 0);
});
// 指定ポートで待つ.
// ipv4設定(node17からBIND先のIPアドレス設定してない場合はipv6となるので0.0.0.0でBIND).
server.listen(sysParams.getPort(), "0.0.0.0");
// 起動結果をログ出力.
console.info("## listen: " + sysParams.getPort() +
" env:[" + sysParams.getEnvironment() +
"] timeout:" + (sysParams.getTimeout() / 1000) +
"(sec) contentCache:" + sysParams.isContentCache() +
" pid:" + process.pid);
server = null;
}