0%

node框架KOA

koa 使用

  • 首先需要初始化一个项目

    1
    npm init
  • 然后安装 koa

    1
    npm install koa -D
  • 新建一个server.js

  • 引入koa及koa路由

    1
    2
    const koa = require("koa");
    const Router = require("koa-router");
  • 使用koa类

    1
    let server = new koa();
  • 监听8080端口号

    1
    server.listen(8080);
  • 使用koa路由类

    1
    let router = new Router();
  • 添加一个路由

    1
    2
    3
    4
    5
    6
    7
    router.get("/login", async ctx => {
    if (!ctx.query.user || !ctx.query.pass) {
    ctx.throw(400, "user and password is required");
    } else {
    ctx.body = "成功";
    }
    });
  • 将路由添加到server上

    1
    server.use(router.routes());

koa

  1. v1 generator
  2. v2 过渡版 gennerator&async
  3. v3 async/await

路由方法

  1. get
  2. post
  3. all (所有方法都认)

嵌套路由

  1. koa将路由独立出来,可以将路由嵌套
    1
    2
    3
    4
    5
    6
    7
    /user
    /company
    /
    /admin
    /news
    /sport
    /woman

传参

  1. urlencoded传参 http://k.com/user?a=1
    • 灵活
    • 可省略
  2. params传参 http://k.com/user/1
    • 利于seo(相对静态)

后台获取信息

  1. ctx.params
  2. ctx.query
  3. ctx.method
  4. ctx.url

  1. server.context: 相当于ctx的原型(prototype)

  1. ctx.request
  2. ctx.response
    信息

  1. ctx.method 请求方法
  2. ctx.url
  3. ctx.path
  4. ctx.query get数据
  5. ctx.ip 客户端的ip
  6. ctx.headers 请求头

错误处理

  1. ctx.throw(code, msg)
  2. ctx.assert(条件, code, msg)

  1. ctx.state=305 (状态码)
  2. ctx.redirect(‘http://www.baidu.com') (重定向到其他页面)
  3. ctx.attachment (发送文件给用户)
    安装koa-static(访问静态页面)

1
npm install koa-static -D
1
2
3
4
5
6
7
// 引入
const static require('koa-static');
// 使用
server.use(static('./static'), {
maxage: 86400 * 1000, // 单位:毫秒
index: 'index.html ' // 默认访问文件
})

安装koa-better-body

1
2
3
npm koa-beeter-body -S
// 支持文件数据,json数据,formData数据
ctx.request.fields //获取请求的参数

cookies

1
2
3
4
5
6
7
8
9
10
11
12
13
server.keys=['sdfg','sdfsdfsdfs']
server.use(async ctx => {
ctx.cookies.set('user', 'bule', {
// 配置
maxAge: 14 * 86400 * 1000, // 有效期
signed: true // 签名的
})

console.log(ctx.cookies.get('user',{signed:true}))
// 签名,在设置和获取时,都需要将signed设置为true
})
// ctx.cookies.set()
// ctx.cookies.get()

session

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 需要引入
const session = require('koa-session');
server.keys=['sdfg','sdfsdfsdfs']
server.use(session({
maxAge: 20 * 60 * 1000, // 有效期
renew: true // 自动续期(用户有任何操作,有效期重新计算)
}, server)
)

server.use(async ctx => {
if(!ctx.session['view']){
ctx.session['view']=0;
}
ctx.session['view']++;
ctx.body=`欢迎你第${ctx.session.view}次来访`;
})

数据库

1
npm install mysql co-mysql -D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const mysql = require('mysql');
const co = require('co-mysql');

let conn = mysql.createPool({
host: 'localhost',
user: 'root',
password: '',
database: '2018'
})

let db = co(conn);

let server = new Koa();
server.listen(8080);

server.context.db=db;

server.use(async ctx => {
let data = await ctx.db.query('SELECT * FROM item_table');

ctx.body = data;

})