context 对象是 Koa context 模块扩展出来的,添加了诸如 state、cookie、req、res 等属性。onFinished 是一个第三方函数,用于监听 http response 的结束事件,执行回调。如果找到 context.onerror 方法,这是 koa默认的错误处理函数,它处理的是错误导致的异常结束。错误的处理是在 callback 中监听的:// callback...
Koa 的构造器上的 this.middleware、 this.context、 this.request、this.response 原型上有:listen、use、callback、handleRequest、createContext、onerror 注:以下代码都是删除异常和非关键代码 先看listen ...listen(...args){constserver=http.createServer(this.callback())returnserver.listen(...args)}... ...
koa中间件机制是采用koa-compose实现的,compose函数接收middleware数组作为参数,middleware中每个对象都是async函数,返回一个以context和next作为入参的函数,我们跟源码一样,称其为fnMiddleware在外部调用this.handleRequest的最后一行,运行了中间件:fnMiddleware(ctx).then(handleResponse).catch(onerror); 以下是koa-compos...
finishes或者errors时执行 onFinished(res, onerror);
res.statusCode=404constonerror=err=>ctx.onerror(err)consthandleResponse=()=>respond(ctx)onFinished(res,onerror)returnfnMiddleware(ctx).then(handleResponse).catch(onerror)} context.js 就是中间件参数中的ctx,上下文,最主要的功能是基于delegates模块实现的。
默认情况下,将所有错误输出到 stderr,除非app.silent为true。 当err.status是404或err.expose是true时默认错误处理程序也不会输出错误。 要执行自定义错误处理逻辑,如集中式日志记录,您可以添加一个 “error” 事件侦听器: app.on('error', err => { log.error('server error', err) }); ...
if (!this.listeners('error').length) this.on('error', this.onerror); const handleRequest = (req, res) => { const ctx = this.createContext(req, res); return this.handleRequest(ctx, fn); }; return handleRequest; } 这里用compose处理了一下this.middleware,创建了ctx并赋值为createContext...
handleRequest(ctx,fnMiddleware){constres=ctx.res;res.statusCode=404;constonerror=err=>ctx.onerror(err);consthandleResponse=()=>respond(ctx);onFinished(res,onerror);//执行compose中返回的函数,将结果返回returnfnMiddleware(ctx).then(handleResponse).catch(onerror);}koa-composecompose函数...
Koa 还提供了异常处理的解决方式,统一的异常处理源码见 ctx.onerror,我们可以使用 app.on('error',()=>{}) 来统一错误处理。参考资料 https://www.zhihu.com/question/38879363https://www.imooc.com/article/22994https://www.cnblogs.com/chyingp/p/nodejs-learning-express-body-parser.htmlhttps://...
$ npm install --save koa-multer@0.0.2 Usage var app = require('koa')() , koa = require('koa-router')() , logger = require('koa-logger') , json = require('koa-json') , views = require('koa-views') , onerror = require('koa-onerror');var multer = require('koa-...