Handler - nokitjs/nokit GitHub Wiki
Handler 在 nokit 的概念里,是指针对某一特时类型的请求的 “处理器”,比如 mvc、nsp、rest 都有一个对应的 handler 支持。
以一个简单的 favicon handler 举例:
var fs = require("fs");
var path = require("path");
var FAVICON_PATH = "$./resources/favicons/favicon.ico";
var Handler = module.exports = function (server) {
var self = this;
self.server = server;
self.configs = self.server.configs;
};
//处理请求
Handler.prototype.handle = function (context) {
var self = this;
context.request.physicalPathExists(function (exists) {
if (!exists) {
var resPath = self.server.resolvePath(FAVICON_PATH);
context.request.setPhysicalPath(resPath);
}
self.next(context);
});
};
在 app.json 中注册:
{
...
"handlers":{
"^/favicon.icon$::favicon": "$./handlers/favicon",
"^/favicon.ico$::favicon": "$./handlers/favicon",
}
...
}
handler 仅用于扩展 nokit 支持的处理类型,对于一般应用的开发,几乎不会去编写一个 handler , 几乎所以类似的需求都可以用 filter 实现,Handler 与 filter 不同:
- handler 在经过所有符合的 filter 后,才会将请求交由 handler 处理。
- 一个请求会经过 0 或 n 个 filter,但一个请求最终一定会被 1 个 handler 处理(可能会有 n 个 handler 检查是否要进行处理)。
- filter 可以截获生命周期中的多个事件,而 handler 没有。
- filter 可以通过 parallel 属性指定为 “并行” 的,所有 “并行 filter” 会同时触发,而 handler 没有。