美文网首页
koa学习记录

koa学习记录

作者: luq885 | 来源:发表于2017-05-15 21:48 被阅读0次

koa-generator

项目使用 koa-generator 创建,git地址

安装
npm install -g koa-generator

创建项目

$ koa /tmp/foo & cd /tmp/foo

安装依赖

$ npm install

运行

$ npm start
通用

要捕获所有的 error,可以在加载 global middlewares之前添加捕获代码。
其中 err.status,这个可以在抛出错误的时候先新建 Error 对象,然后指定一下 status 即可。

app.use(function* (next) {
    var start = new Date;
    try {
        yield next;
    } catch (err) {
        this.set('connection', 'close');
        this.status = err.status || 500;
        this.body = { 'success': false, 'message': err.message };
        //这里触发最后的app.on('error'...
        this.app.emit('error', err, this);
    }
    var ms = new Date - start;
    console.log('%s %s - %s', this.method, this.url, ms);
});

// global middlewares

因为是 webapi 项目,最后输出的 json 格式要统一,可以在加载 global middlewares 之后添加格式化代码。this.returnMessage 直接加到 this 上的。

// global middlewares
...
app.use(function* (next) {
    yield next;
    if (!this.body) {
        var err = new Error('can not find the resource');
        err.status = 404;
        throw err;
    }
    this.body = { 'success': true, 'data': this.body, 'message': this.returnMessage || '' };
});
koa-router

mu 请求要验证密码,是通过 querystring 参数 mupass 提供的,可以自己写一个验证用的 middleware。

var muAuth = function* (next) {
        if (this.query.mupass && this.query.mupass === config.muPass) {
            yield next;
        } else {
            var err = new Error('mu auth failed!');
            err.status = 401;
            throw err;
        }
    };

然后在 router 里直接使用即可

koa.use('/mu', muAuth, mu.routes(), mu.allowedMethods());

可以使用 router.param 方法过滤参数

router.param('id', function* (nodeId, next) {
    if (nodeId === '1') {
        yield next;
    } else {
        var err = new Error('server node not exist');
        err.status = 404;
        throw err;
    }
});

相关文章

  • Koa集成koa-session

    学习目标 在koa项目中集成koa-session并实现记录访问次数 先安装模块 集成koa-session到项目...

  • koa学习记录

    koa-generator 项目使用 koa-generator 创建,git地址 安装 创建项目 安装依赖 运行...

  • koa学习记录

    主要以软老师的教程为主http://www.ruanyifeng.com/blog/2017/08/koa.htm...

  • koa

    koa 学习 中间件 koa-router koa-router 获取get/post请求参数 koa-bodyp...

  • koa源码

    koa 源码学习记录。因为代码量非常少,所以也很好理解。 http.createServer([requestLi...

  • koa必备插件分析:koa-session的内部实现

    koa-session的使用方法 koa-session是在koa应用中用于记录请求者身份的常用中间件,其使用方法...

  • koa入门

    学习nodejs 中的koa2 一. 什么是koa ​ 类似于 express , koa是一个基于node...

  • Egg企业级框架踩坑之路(一)

    记录一下 Egg 采坑道路,简要介绍:如果说 Express 和 Koa属于基础框架,那么基于 Koa 这个蛋就算...

  • koa 使用记录

    koa-body: 实现文件上传(form action=“...url” 提交表单式上传) koa-parser...

  • 手写一个 Koa --- Koa 原理学习

    一个学习 Koa 源码的例子 学习目标:原生 node 封装中间件路由静态文件服务(未完成待续) Koa 原理 一...

网友评论

      本文标题:koa学习记录

      本文链接:https://www.haomeiwen.com/subject/znckxxtx.html