手写一个超简单的中间件
一个很简单的中间件,其作用仅仅是打印出当前访问的URL。
- 创建一个项目目录:
mkdir logmiddleware && cd logmiddleware
;
- 安装相关插件、依赖,这里我们使用了Koa:
npm install -S koa
;
- 新建index.js:
const Koa = require('koa');
const app = new Koa();
// 这里我们使用一个中间件
app.listen(3000);
- 新建log.js文件:
该文件是我们需写的一个中间件,该中间件需要我们传递一个对象作为参数,其中对象中包含一个
format
属性,是一个方法。
如果熟悉中间件的原理,就会理解,所谓的中间件的实现,就是利用了async/await。
module.exports = options => {
if (!options.format) {
console.log('需要传递format参数');
}
return async (ctx, next) => {
console.log(options.format(ctx.url));
await next();
}
}
- 修改我们前面的index.js文件:
这里我们引入刚才的中间件,并且传递了一个对象,对象中含有一个format函数,符合我们中间件的参数要求。该函数返回一个文本。
const Koa = require('koa');
const log = require('./log.js');
const app = new Koa();
config config = {
format: text => text,
}
app.use(log(config))
app.listen(3000);
- 运行,执行
node index.js
命令
node index.js
此时,如果我们访问127.0.0.1:3000
便会将请求URL打印出来。
如果你发现打印了两次,其中有一个打印的值为:
favicon.ico
,可以不必理会,这是因为浏览器默认去请求网址icon所导致的。