mecanografiado node.js rutas expresas mejores prácticas de archivos separados
usando Express en un proyecto Node junto con Typecript, cuáles serían las "mejores prácticas" para express.Router.
ejemplo de estructura de directorios
|directory_name
---server.js
|--node_modules
|--routes
---index.ts
|--admin
---admin.ts
|--products
---products.ts
|--authentication
---authentication.ts
así que dentro de index.ts encapsularía y administraría todos los subenrutadores
<pre class="snippet-code-js lang-js prettyprint-override"><code> //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></pre>
//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....
Por último, configuraríamos nuestro server.js
<pre class="snippet-code-js lang-js prettyprint-override"><code> //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></pre>
mi pregunta principal es realmente index.ts (archivo masterRouter) y sus rutas anidadas son IIFe
export = (function () {}) ();
¿debería ser esa la forma correcta / mejor de escribir módulos de mecanografía para enrutadores?
o sería mejor usar otro patrón, quizás uno que utilice el patrón
función de exportación fnName () {} - exportar clase cName {} - exportar por defecto.
La razón del IIFe es que cuando los importe en otro archivo no necesitaré inicializar el módulo y solo habrá una instancia de cada tipo de enrutador.