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

Node KOA框架入门

时间:2019-11-05 21:27:39      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:method   上下文   bbb   http   lse   eth   cnp   localhost   get   

KOA:

v1 generator

v2 过渡版 generator&async

v3 async/await

 

koa

koa不带路由  因此得cnpm i koa-router -D

 

路由:1.嵌套、2.参数

0.普通路由

const koa = require(koa);
const Router = require(koa-router);

let server = new koa();
server.listen(8520,()=>{console.log(success);});

//普通路由
let router = new Router();
router.get(/a, async ctx=>{
    //ctx:上下文对象
    ctx.body=aaa;
    ctx.body+=bbb;
    console.log(ctx.body);
})
//把router怼给server才能生效
server.use(router.routes());

1.嵌套路由

//1.嵌套路由:
/user
    /company
    /person
    /admin
/news
    /sport
    /woman
    /man
/car
...

  (1).项目目录

技术图片

  (2).index.js

const Router = require(koa-router);

let router = new Router();

router.get(/,async ctx=>{
    ctx.body=用户;
})
router.use(/company,require(./company))
router.use(/admin,require(./admin))

module.exports=router.routes();

  (3).admin.js和company.js

const Router = require(koa-router);

let router = new Router();

router.get(/a,async ctx=>{
    ctx.body=管理员的a;
})

module.exports=router.routes();
const Router = require(koa-router);
let router = new Router();
router.get(/a,async ctx=>{
    ctx.body=企业的a;
});
module.exports=router.routes();

  (4).server.js

let router = new Router();
router.use(/user,require(./routers/user));
server.use(router.routes());

运行node server.js,在浏览器输入"localhost:8520/user/admin/a",页面上则显示"管理员的a";

输入"localhost:8520/user/company/a",页面上则显示"企业的a"。

 

2.参数

//2.参数:
http://localhost:8520/news/12
http://localhost:8520/news/123/889
http://localhost:8520/news/123/555/146

quretion1: 用?id=xxx传参和/:id的区别
urlencoded      http://aaa.com/user?a=12&b=5
params          http://aaa.com/user/12/5

    urlencoded        params
    顺序灵活          顺序是死的
    可以省略          不可省略的
    不利于SEO         利于SEO(因为地址是静态的) 

  (1).项目目录

技术图片

  (2).参数params

const Koa = require(koa);
const Router = require(koa-router);

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

let router = new Router();

router.get(/news/:id,async ctx=>{
    console.log(ctx.params);
    let {id} = ctx.params
    ctx.body=`新闻${id}`;
});

router.get(/news/:id/:id2,async ctx=>{
    console.log(ctx.params);
    let {id,id2} = ctx.params
    ctx.body=`新闻${id}_${id2}`;
});

router.get(/news/:id/:id2/:id3,async ctx=>{
    console.log(ctx.params);
    let {id,id2,id3} = ctx.params
    ctx.body=`新闻${id}_${id2}_${id3}`;
});

server.use(router.routes());

  (3).参数urlencoded

const Koa = require(koa);
const Router = require(koa-router);

let server = new Koa();
server.listen(8520,()=>{console.log(success);});

let router = new Router();

router.get(/news/,async ctx=>{
    console.log(ctx.query);
    let {id} = ctx.query;
});

server.use(router.routes());

 

熟悉ctx对象

熟悉ctx对象

server.context:相当于ctx的prototype
所以server.context适合放全局的东西

ctx.request
ctx.response

信息:
ctx.method      请求方法
ctx.url         请求地址
ctx.path        请求路径
ctx.query       get数据
ctx.ip          客户端ip
ctx.headers     请求头

 

比较方便的报错方法

比较方便的报错方法:

ctx.throw       //报错并且退出
eg:
if(!ctx.query.user || !ctx.query.pass){
    ctx.throw(400,user and password is required)
}else{
    ctx.body=成功;
}

ctx.assert()    //断言测试
ctx.assert(条件,code,msg)==if(!条件)ctx.throw
eg:
ctx.assert(ctx.query.user,400,username is required)

 

 

Node KOA框架入门

标签:method   上下文   bbb   http   lse   eth   cnp   localhost   get   

原文地址:https://www.cnblogs.com/comedy/p/11801470.html

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