typescript node.js Express-Routen getrennte Dateien Best Practices
Verwenden von Express in einem Node-Projekt zusammen mit Typescript, was die "Best Practices" für express.Router wären.
example directory structure
|directory_name
---server.js
|--node_modules
|--routes
---index.ts
|--admin
---admin.ts
|--products
---products.ts
|--authentication
---authentication.ts
so innerhalb von index.ts werden alle Subrouter gekapselt und verwaltet
<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....
um Schluss würden wir unsere server.js einrichte
<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>
Meine Hauptfrage ist wirklich, ist index.ts (masterRouter-Datei) und es sind verschachtelte Routen, die IIFes @ sin
export = (function () {}) ();
wäre das der richtige / beste Weg, um Typoskript-Module für Router zu schreiben?
oder wäre es besser, ein anderes Muster zu verwenden, vielleicht nutzt eines das Muster
export function fnName () {} - export class cName {} - export default.
der Grund für das IIFe ist, dass ich beim Importieren in eine andere Datei das Modul nicht initialisieren muss und es immer nur 1 Instanz von jedem Routertyp gibt.