Middl 是采用JS编写的通用中间件。
安装
npm install --save middl
模块使用:
const middl = require('middl'); const app = middl(); // a sync middleware app.use((input, output) => { output.prop = 1; }); // an async middleware app.use((input, output) => { // Faking a time consuming task... return new Promise(resolve => { setTimeout(() => { output.prop += 1; resolve(); }, 10); }); }); // a time measuring logger: app.use((input, output) => { var start = new Date(); next() .then(() => { var ms = new Date() - start; console.log('Done in %s ms', ms); }); }); // or even prettier with generator functions: app.use(function *(input, output) { var start = new Date(); yield next(); var ms = new Date() - start; console.log('Done in %s ms', ms); }); // or when using Babel and async/await: app.use(async (input, output) => { var start = new Date(); await next(); var ms = new Date() - start; console.log('Done in %s ms', ms); }); // pass in the initial `input` and `output` objects // and run the middleware stack: app.run({val: 'hello'}, {}) .then(output => { // output.prop === 2 });
示例代码:
const http = require('http'); const middl = require('middl'); // Make middl more Express like by using `url` as the property to match paths with: const app = middl({pathProperty: 'url'}); // Adding all app.METHOD() functions à la Express: http.METHODS.forEach(method => { app[method.toLowerCase()] = app.match({method}); }); // Also the app.all(): app.all = (path, fn) => { http.METHODS.forEach(method => { app[method.toLowerCase()](path, fn); }); return app; }; // A route handler for requests to: GET /test app.get('/test', (req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('ok\n'); }); // A route handler for requests to: POST /test app.post('/test', (req, res) => { res.writeHead(202, {'Content-Type': 'text/plain'}); res.end('accepted\n'); }); // Make the middle app web server listen on port 3000: http.createServer(app).listen(3000);