码迷,mamicode.com
首页 > 其他好文 > 详细

koa2入门使用总结

时间:2018-12-24 23:34:27      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:活着   local   https   NPU   use   route   method   均衡   china   

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

koa2入门使用总结

标签:活着   local   https   NPU   use   route   method   均衡   china   

原文地址:https://www.cnblogs.com/fozero/p/10171322.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!