这是我参与「第四届青训营 」笔记创作活动的第4天
简介:koa是基于node.js平台的web开发框架,致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
一、Koa2安装
创建一个空白目录,然后进入终端,并在终端对koa进行安装:
- 项目初始化
npm init -y
- 安装koa2
npm i koa2 -S
二、入口文件
在 app.js 中:
const Koa = require('koa2');
const app = new Koa();
const port = 9000;
app.use(async (ctx)=>{
ctx.body = "Hello, Koa";
})
app.listen(port, ()=>{
console.log('Server is running at http://localhost:'+port);
})
解释下面这段代码: ctx.body是ctx.response.body的简写 app.use()方法是:将给定的中间件方法添加到此应用程序。简单说就是调用中间件 app.use() 返回 this, 因此可以链式表达
然后运行 npm start ,并在浏览器输入 http://localhost:9000/ 即可看到页面效果。
三、洋葱模型
学Koa必须要了解 洋葱模型 :
Koa 和 Express 都会使用到中间件,Express的中间件是顺序执行,从第一个中间件执行到最后一个中间件,发出响应:
Koa是从第一个中间件开始执行,遇到 next 进入下一个中间件,一直执行到最后一个中间件,在逆序,执行上一个中间件 next 之后的代码,一直到第一个中间件执行结束才发出响应。
四、路由
路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等) 组成的,涉及到应用如何响应客户端对某个网站节点的访问。 通俗的讲:路由就是根据不同的 URL 地址,加载不同的页面实现不同的功能。
Koa 中的路由和 Express 有所不同,在 Express 中直接引入 Express 就可以配置路由,但是在 Koa 中我们需要安装对应的 koa-router 路由模块来实现
当需要匹配不同路由时,可以安装:
npm i koa-router
将 app.js 修改:
const Koa = require('koa2');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
const port = 9000;
router.get('/', async (ctx)=>{
ctx.body = "首页";
})
router.get('/list', async (ctx)=>{
ctx.body = "列表页";
})
app.use(router.routes(), router.allowedMethods());
app.listen(port, ()=>{
console.log('Server is running at http://localhost:'+port);
})
此时,到浏览器刷新并在地址栏最后添加 /list 即可得到首页和列表页。
备注:
调用router.routes()来组装匹配好的路由,返回一个合并好的中间件
调用router.allowedMethods()获得一个中间件,当发送了不符合的请求时,会返回 405 Method Not Allowed 或 501 Not Implemented
allowedMethods方法可以做以下配置:
app.use(router.allowedMethods({
// throw: true, // 抛出错误,代替设置响应头状态
// notImplemented: () => '不支持当前请求所需要的功能',
// methodNotAllowed: () => '不支持的请求方式'
}))
1.在 koa2 中 GET 传值通过 request 接收,但是接收的方法有两种:query 和 querystring。 query:返回的是格式化好的参数对象。 querystring:返回的是请求字符串。
2.koa-bodyparser接收post请求 koa-bodyparser就是一个造好的轮子。我们在koa中把这种轮子就叫做中间件。 对于POST请求的处理,koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中。 安装 koa-bodyparser
npm install --save koa-bodyparse
五、后端允许跨域 koa-cors
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
但在实现上,跟AJAX完全一致,需要的是浏览器和服务器的配合。
浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,具体来说,就是在头信息之中,增加一个Origin字段。
而服务器端需要处理的字段也是与 CORS 相关的字段,都以 Access-Control- 开头。
服务器收到请求以后,检查了 Origin、Access-Control-Request-Method和Access-Control-Request-Headers 字段以后,确认允许跨源请求,就可以做出回应。
前端想跨域,可以设置proxy。如果后端允许跨域,可以如下操作:
// 安装koa2-cors
cnpm i koa2-cors
// 这里cors中间件一定要写在路由之前
app.use(cors());
app.use(router.routes(), router.allowedMethods())
注意:这里cors中间件一定要写在路由之前,否则不起作用
六、读取静态资源文件
首先,在项目的根目录下创建 assets 后,将图片资源文件夹 images 放到其中,并且执行以下操作:
// 安装koa-static
cnpm install koa-static
// 引入
const path = require('path')
const static = require('koa-static')
// 获取静态资源文件夹
app.use(static(path.join(__dirname+'/assets')));
...
app.use(router.routes(), router.allowedMethods())
假设其中有一张图片叫做 banner1.png,那么我们打开浏览器,访问:http://localhost:5050/images/banner1.png 即可得到图片。这里注意:
路径上不需要写assets,因为我们已经指定了访问资源时, http://localhost:5050 自动指向 assets 文件夹。
由此,我们知道数据库中图片的地址只需要填写 /images/banner1.png 即可。