zoukankan      html  css  js  c++  java
  • koa2入门使用总结

    koa2的介绍

    Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。

    koa2安装

    npm install koa
    

    koa middleware

    每收到一个http请求,koa就会调用通过app.use()注册的async函数,并传入ctx和next参数
    middleware的顺序很重要,也就是调用app.use()的顺序决定了middleware的顺序

    对于await next(),如果一个middleware没有调用,则后续的middleware将不再执行了,使用场景
    如,一个检测用户权限的middleware可以决定是否继续处理请求,还是直接返回403错误

    app.use(async (ctx, next) => {
        if (await checkUserPermission(ctx)) {
            await next();
        } else {
            ctx.response.status = 403;
        }
    });
    

    ctx简写

    ctx.url相当于ctx.request.url,ctx.type相当于ctx.response.type
    

    url处理 ,使用koa-router

    安装koa-router

    npm install koa-router
    
    // 注意require('koa-router')返回的是函数:
    const router = require('koa-router')();
    
    这里导入koa-router的语句最后的()是函数调用
    const router = require('koa-router')();
    相当于 
    const fn_router = require('koa-router');
    const router = fn_router();
    
    
    // add url-route:
    router.get('/hello/:name', async (ctx, next) => {
        var name = ctx.params.name;
        ctx.response.body = `<h1>Hello, ${name}!</h1>`;
    });
    
    router.get('/', async (ctx, next) => {
        ctx.response.body = '<h1>Index</h1>';
    });
    
    // add router middleware:
    app.use(router.routes());
    

    这样我们在访问http://localhost:3000/hello/kerry时会打印hello,kerry

    处理post请求

    post请求通常会发送一个表单,或者JSON,它作为request的body发送,但无论是Node.js提供的原始request对象,还是koa提供的request对象,都不提供解析request的body的功能,所以我们需要用到koa-bodyparser中间件来解析request的body

    安装koa-bodyparser

    npm install koa-bodyparser
    
    const bodyParser = require('koa-bodyparser');
    
    // 解决body 需在router之前注册到app对象上
    app.use(bodyParser());
    
    
    这样我们就可以处理post请求了
    router.get('/', async (ctx, next) => {
        ctx.response.body = `<h1>Index</h1>
            <form action="/signin" method="post">
                <p>Name: <input name="name" value="koa"></p>
                <p>Password: <input name="password" type="password"></p>
                <p><input type="submit" value="Submit"></p>
            </form>`;
    });
    
    router.post('/signin', async (ctx, next) => {
        var
            name = ctx.request.body.name || '',
            password = ctx.request.body.password || '';
        console.log(`signin with name: ${name}, password: ${password}`);
        if (name === 'koa' && password === '12345') {
            ctx.response.body = `<h1>Welcome, ${name}!</h1>`;
        } else {
            ctx.response.body = `<h1>Login failed!</h1>
            <p><a href="/">Try again</a></p>`;
        }
    });
    

    代码优化

    所有的代码都放在了app.js中
    我们可以单独将所有路由放到一个js文件中,如果是复杂系统,还可以按模块建立多个路由文件,如
    user.js(处理用户管理相关url)、login.js(处理用户登录相关url)

    静态资源

    安装koa-static

    npm install koa-static
    
    const static = require('koa-static')
    const path = require('path')
    
    // 静态资源目录
    app.use(static(
      path.join( __dirname,'./static')
    ));
    

    我们在根目录下建立static文件夹,新建一个json文件,输入如下地址访问

    http://localhost:3000/china.geojson
    

    art-template模板引擎

    npm install --save art-template
    npm install --save koa-art-template
    
    
    // 模板引擎
    const render = require('koa-art-template');
    
    render(app, {
      root: path.join(__dirname, './static'),
      extname: '.html',
      // debug: process.env.NODE_ENV !== 'production'
    });
    
    // 使用ctx.render渲染页面 可传递数据
    router.get('/user', async (ctx, next) => {
        ctx.render('user',{
                data:'hello msg'
        });
    });
    

    html中渲染数据 {{data}}

    更多用法查看
    https://aui.github.io/art-template/zh-cn/docs/index.html

    koa2 跨域请求设置

    https://github.com/zadzbw/koa2-cors
    npm install --save koa2-cors
    
    var cors = require('koa2-cors');
    app.use(cors());
    

    开发部署 ,使用nodemon在本地开发环境下自动重启项目

    1、 项目搭建好后,通过node运行

    node app.js
    

    也可以在package.json中添加scripts

    "scripts": {
        "start": "node app.js"
    }
    

    这样就可以运行

    npm run start
    

    然后访问http://localhost:3000

    2、 通过nodemon来运行项目

    npm install -g nodemon
    

    之后用 nodemon 来代替 node 来启动应用

    nodemon app.js
    

    3、 如果是在线上 我们则使用pm2来管理应用程序,
    pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的
    https://www.cnblogs.com/lxg0/p/7771229.html

    最后

    通过以上简单介绍对koa2使用,我搭建了一个koa2本地静态node服务器,已上传至github,欢迎大家star或clone
    koa2-server

  • 相关阅读:
    大话设计模式——UML图
    IdentityServer3零星笔记
    Angular路由
    基于jquery的静态页面翻页
    00_python安装与配置(mac)
    OracleParameter.UdtTypeName的值必须是全大写!
    VS2012调用64位IIS Express
    MVC中使用Ueditor
    优秀博客站点
    jqGrid中的formatter
  • 原文地址:https://www.cnblogs.com/fozero/p/10171322.html
Copyright © 2011-2022 走看看