Koa 框架介绍
Node.js 是一个异步的世界,异步编程模型会带来回调地域
koa 是由Express 原班人马打造的,可以免除重复繁琐的回调函数嵌套, 并极大地提
升错误处理的效率。阿里内部就在使用Koa 框架,并在Koa 基础上面做了一些扩展和封装。并且基于koa 开发了一个开源框架egg。
Koa2.x 框架的安装使用
基于node.js,所以需要先安装node
首先需要初始化一个package.json文件,使用npm init一路回车
npm install --save koa
最基本的使用如下:
//引入Koa
const koa=require('koa');
const app=new koa();
//配置中间件(可以先当做路由)
app.use( async (ctx)=>{
ctx.body='hello koa2'
})
//监听端口
app.listen(3000);
Koa 异步处理Async 、Await 和Promise的使用
async 是“异步”的简写,而await 可以认为是async wait 的简写。
async 是让方法变成异步。
await 是等待异步方法执行完成,相当于把异步变成同步,必须放到异步方法中使用。
async 会将其后的函数的返回值封装成一个Promise 对象,而await 会等待这个Promise 完成,并将其resolve的结果返回出来。
async function getData() {
return "nihao!"
}
var d=getData();
console.log(d); //Promise { 'nihao!' }
d.then((res)=>{
console.log(res) //nihao!
});
await的用法,用到一个async方法里面,await之前的async方法返回一个结果
只有执行这个await方法,才能得到结果。
async function getData() {
return "nihao!"
}
async function d() {
var res=await getData();
console.log(res) //d()执行后打印出nihao!
}
d();
Koa 路由
路由就是根据不同的URL 地址,加载不同的页面实现不同的功能。
Koa 中我们需要安装对应的koa-router 路由模块来实现。
路由安装:npm install --save koa-router
路由引入:const router = require('koa-router')(); //注意:引入的方式,带括号
上面一句话,相当于下面两句
let Router=require("koa-router");
let router=new Router();
koa路由的使用案例
let koa= require("koa"); //引入koa
let app=new koa(); //实例化koa
let router=require("koa-router")(); //引入并实例化koa-router
router.get('/', async (ctx)=> {
ctx.body="这是首页";
})
.get("/news",async (ctx)=>{ //这里使用了链式写法,也可以像下面一样写
ctx.body="这是新闻页"
});
router.get("/about",async (ctx)=>{
ctx.body="这是关于我们"
});
app.use(router.routes()); //启用路由
app.listen(3000); //监听3000端口
通过ctx.query获取get传值
router.get("/news",async (ctx)=>{
ctx.body="这是新闻页";
console.log(ctx.query); //通过ctx.query获取get传值
console.log(ctx.url); //获取浏览器输入的地址,也可以打印ctx看看里面都什么
});
这时候浏览http://localhost:3000/news?aid=3&age=18
控制台就可以打印一个对象{ aid: '3', age: '18' }
/news?aid=3&age=18这个叫做get传值
/news/123这个叫做动态路由
动态路由和vue动态路由三部曲一样的,形参,接收,实参
router.get("/news/:newsId",async (ctx)=>{
ctx.body="这是新闻页";
console.log(ctx.params); //{ newsId: '12' }
});
汇总使用如下
router.get("/news/:newsId",async (ctx)=>{
ctx.body="这是新闻页";
console.log(ctx.params);
console.log(ctx.query);
});
地址栏里输入/news/12?title="张三丰练就太极八卦掌"&age=81回车后
上面分别打印的是
{ newsId: '12' }
{ title: '"张三丰练就太极八卦掌"', age: '81' }
网友评论