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 不同:

  1. handler 在经过所有符合的 filter 后,才会将请求交由 handler 处理。
  2. 一个请求会经过 0 或 n 个 filter,但一个请求最终一定会被 1 个 handler 处理(可能会有 n 个 handler 检查是否要进行处理)。
  3. filter 可以截获生命周期中的多个事件,而 handler 没有。
  4. filter 可以通过 parallel 属性指定为 “并行” 的,所有 “并行 filter” 会同时触发,而 handler 没有。
其它一些 handler:
  1. https://github.com/nokitjs/nokit-handler-less
  2. https://github.com/nokitjs/nokit-handler-markdown