基本的な要件
•モジュールの接続が簡単
•標準のURL構造
•多言語主義
•自動変更の受け入れ
•マルチプロセッサシステムの機能を使用する
システムはExpressに基づいています。 wait.forモジュールは、コードの記述を容易にするために使用されます。
ファイル構造
- 根
- ルート
- mod_api
- test.js
- api.js
- mod_api
- 景色
- 公開
- app.js
- Server.js
- ルート
Linuxサーバーのデモ
このプロジェクトでは、 foreverモジュールが使用されました。
-w-サーバーを直接再起動せずにモジュールを変更できます。 永遠に変更を監視し、必要に応じてサーバーに過負荷をかけます。
-lは、2つのログが多すぎると判断されたため、無効になります。
forever start -a -w -l /dev/null -o out.log -e err.log Server.js
マルチプロセッサシステムの機能を使用する
「クラスター」モジュールを介して複数のプロセスを起動して、コア間で負荷を分散します。
// Server.js var cluster = require('cluster'); var workerCount = require('os').cpus().length; cluster.setupMaster({ exec: "app.js" }); // Fork workers. for (var i = 0; i < workerCount ; i++)cluster.fork()
モジュール接続
モジュールを簡単に接続するには、2つのスイッチを使用します。
すべてのルートを自動的に接続する
// part of app.js // routes var routesPath = path.join(__dirname, 'routes'); // var routeList = fs.readdirSync(routesPath); for(var i in routeList){ var filePath = path.join(routesPath,routeList[i]); if(fs.statSync(filePath).isFile() && path.extname(routeList[i])=='.js') require(filePath)(app); // }
モジュール接続と関数呼び出し
ルートは個別に定義されます。 各ファイルでは、最終開発者のルートの統一と接続の容易さもどのように達成されます。
// api.js module.exports = function (app) { app.get('/api/:mod/:lang/:action', function(req, res){action(req,res,global.conf.METHODS.GET);}); app.post('/api/:mod/:lang/:action', function(req, res){action(req,res,global.conf.METHODS.POST);}); app.delete('/api/:mod/:lang/:action', function(req, res){action(req,res,global.conf.METHODS.DELETE);}); app.put('/api/:mod/:lang/:action', function(req, res){action(req,res,global.conf.METHODS.PUT);}); }; function action(req, res, method) { // var lang = req.params.lang.toUpperCase(); if (global.conf.AVAILABLE_LANGUAGES.indexOf(lang) > -1) { // var mod = req.params.mod.replace(/[^a-zA-z0-9]+/g,''); // var action = req.params.action.replace(/[^a-zA-z0-9]+/g,''); // fs.exists(path.resolve(__dirname, './mod_api/'+mod+".js"),function(ok){ if(ok){ // var startMode = require('./mod_api/'+mod); try{ // pub_ wait.launchFiber(startMode['pub_'+action], req, res, lang, method); }catch(err){ res.status(405).pj(405,err.message,"Method Not Allowed"); } }else{ res.status(503).pj(503,null,'Service Unavailable '); } }); } else{ res.status(400).pj(400,null,'Not supported language'); } }
最終機能の実装
pub_というプレフィックスを持つすべての関数はパブリックであり、他のすべてはプライベートです。
// file routes/mod_api/test.js exports.pub_Start = function(req, res, lang, method){ res.pj(0,(method===global.conf.METHODS.POST)?"POST":"GET","SUCCESS "); }
出力統合
//part app.js http.ServerResponse.prototype.pj = function(status,data,message){ try { this.json({STATUS:status,CONTENT:data,MESSAGE:message}); }catch(e) { console.error(e); this.json({STATUS:999,CONTENT:null,MESSAGE:'parse response error'});} };
さて、関数呼び出しの最後に: api.codevit.net/api/test/en/Start
(サーバーがクラッシュしないことを本当に望んでいます。これは私のテストサーバーです)
興味がある人は、スケルトンをgithubに投稿できます。
プライベートで構文エラーについて書いてください。