第四次调用,此时函数已经运行完毕,next方法返回对象的value属性为,done属性为true 。以后再调用next方法,返回的都是这个值 。
调用函数,返回一个遍历器对象,代表函数的内部指针 。以后,每次调用遍历器对象的next方法,就会返回一个有着value和done两个属性的对象 。value属性表示当前的内部状态的值,是yield表达式后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束 。koa-源代码
从源代码观察洋葱模型的原理
'use strict'/*** Expose compositor.*/module.exports = compose/*** Compose `middleware` returning* a fully valid middleware comprised* of all those which are passed.** @param {Array} middleware* @return {Function}* @api public*/function compose (middleware) {// 判断接收的中间件是否为数组if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!')for (const fn of middleware) {// 判断是否为函数if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!')}/*** @param {Object} context* @return {Promise}* @api public*/// 返回匿名函数,该函数接收两个参数return function (context, next) {// last called middleware #// 初始下标为-1,记录执行的中间件的索引let index = -1// 从第一个中间件并开始递归执行return dispatch(0) function dispatch (i) {// 这里是保证同个中间件中一个next()不被调用多次调用 // 当i
文章插图
四、路由 1、什么是路由
app.use((ctx) => {if (ctx.url == '/') {ctx.body = '这是主页'} else if (ctx.url == '/users') {if (ctx.method == 'GET') {ctx.body = '这是用户列表页'} else if (ctx.method == 'POST') {ctx.body = '创建用户'} else {ctx.status = 405 // 不支持的请求方法}} else {ctx.status = 404}})
2、使用koa- 1)安装
npm i koa-router或npm i @koa/router
2)使用
// 一. 导入koaconst Koa = require('koa')// 二. 实例化对象const app = new Koa()// 三. 导入koa-router, 实例化路由对象const Router = require('koa-router')const router = new Router()router.get('/', (ctx) => {ctx.body = '这是主页'})router.get('/users', (ctx) => {ctx.body = '这是用户页'})router.post('/users', (ctx) => {ctx.body = '创建用户页'})// 四. 注册路由中间件// userRouter.routes() 加载路由规则// userRouter.allowedMethods() 对于没有实现和没有使用的请求方式做出正确的响应app.use(router.routes())app.use(router.allowedMethods())// 五. 启动服务app.listen(3000, () => {console.log('server is running on http://localhost:3000')})
- 一级 2020年06月 Python真题解析#中国电子学会#全国青少年软件编程
- 小白看完都学会了!五年Android开发者小米、阿里面经,大厂面经合集
- k8s里面Service中ClusterIP和NodePort的使用
- win10 remix - ide 安装
- node搭建web服务器运行html页面,node.js开发web服务器
- node命令交互inquirer
- 销售要学会“甜言蜜语”
- nodejs 4.4. Express写接口---使用CORS解决跨域问题
- Node.js-----使用express写接口
- Nodejs基于Express4的动态页面静态化