typeScriptとともにNodeプロジェクトでExpressを使用する場合、express.Routerの「ベストプラクティス」は何でしょうか。
ディレクトリ構造の例
|directory_name
---server.js
|--node_modules
|--routes
---index.ts
|--admin
---admin.ts
|--products
---products.ts
|--authentication
---authentication.ts
したがって、index.ts内では、すべてのサブルーターをカプセル化して管理します。
//admin.ts (nested inside of index.ts)
import * as express from "express";
export = (() => {
let router = express.Router();
router.get('/admin', (req, res) => {
res.json({success: true});
});
return router;
})();
</ code>
//index.ts (master file for express.Router)
import * as express from "express";
//import sub-routers
import * as adminRouter from "./admin/admin";
import * as productRouter from "./products/products";
export = (() => {
let router = express.Router();
// mount express paths, any addition middleware can be added as well.
// ex. router.use('/pathway', middleware_function, sub-router);
router.use('/products', productRouter);
router.use('/admin', adminRouter);
//return for revealing module pattern
return router;
})(); //<--- this is where I don't understand something....
最後に、server.jsを設定します
//the usual node setup
//import * as *** http, body-parser, morgan, mongoose, express <-- psudocode
import * as masterRouter from './routes/index'
var app = express();
//set-up all app.use()
app.use('/api', masterRouter);
http.createServer(app).listen(8080, () => {
console.log('listening on port 8080')
};
</ code>
私の主な質問は本当に、index.ts(masterRouterファイル)であり、それはIIFeのネストされたルートです
エクスポート=(function(){})();
それはルーター用のTypeScriptモジュールを書くための正しい/最良の方法でしょうか?
または別のパターンを使用する方が良いでしょう、おそらくパターンを利用するもの
エクスポート関数fnName(){}-クラスcNameをエクスポート{}-デフォルトをエクスポートします。
iIFeの理由は、それらを別のファイルにインポートするときにモジュールを初期化する必要がなく、各タイプのルーターのインスタンスが1つしかないためです。
NodeJSでは、各ファイルはモジュールです。変数の宣言は、グローバル名前空間を汚染しません。したがって、変数を適切にスコープする(そしてグローバルな汚染/衝突を防ぐ)ために、古き良きIIFE
トリックを使用する必要はありません。
あなたは書くでしょう:
_ import * as express from "express";
// import sub-routers
import * as adminRouter from "./admin/admin";
import * as productRouter from "./products/products";
let router = express.Router();
// mount express paths, any addition middleware can be added as well.
// ex. router.use('/pathway', middleware_function, sub-router);
router.use('/products', productRouter);
router.use('/admin', adminRouter);
// Export the router
export = router;
_
https://basarat.gitbooks.io/TypeScript/content/docs/project/modules.html
私の主な質問は、実際には、index.ts(masterRouterファイル)であり、それがIIFeの
export = (function(){})();
であるネストされたルートであり、ルーター用のTypeScriptモジュールを記述するための正しい/最良の方法である必要があります
(ソース: memesvault.com )