当前位置: 首页 > news >正文

做公众号文章的网站招标代理公司加盟合作

做公众号文章的网站,招标代理公司加盟合作,宁波seo哪家最便宜,dw做的网站如何上传图片文章目录 1. koa 基本使用2. 参数解析3. 请求路径区分4. 路由5 参数解析5.1 params 与query解析5.2 body参数与urlencoded 解析5.3 form-data参数 6 . 文件上传7. 静态服务器8 响应数据9 错误处理 1. koa 基本使用 安装 npm i koakoa导出的是一个类#xff0c;必须用new关键字… 文章目录 1. koa 基本使用2. 参数解析3. 请求路径区分4. 路由5 参数解析5.1 params 与query解析5.2 body参数与urlencoded 解析5.3 form-data参数 6 . 文件上传7. 静态服务器8 响应数据9 错误处理 1. koa 基本使用 安装 npm i koakoa导出的是一个类必须用new关键字进行创建koa也是通过注册中间件来完成请求操作的 const koa require(koa); // 导出的类必须用new关键字 const app new koa() app.listen(8000, () {console.log(koa 服务器启动~) })// 使用koa这里传递两个参数 cxt 与next app.use((cxt, next) {console.log(匹配中间)cxt.body 使用cxt中的body返回数据 })2. 参数解析 koa注册的中间件提供了两个参数ctx上下文Context对象 koa并没有像express一样将req和res分开而是将它们作为ctx的属性ctx代表一次请求的上下文对象ctx.request获取请求对象ctx.response获取响应对象 next本质上是一个dispatch类似于之前的next 注意点 cxt 上下文有两个请求对象一个是request既koa本身的对象还有一个node 封装的请求对象:req两个响应对象cxt.response 是koa封装的响应式对象 txt.res 是node封装的响应式对象 app.use((cxt, next) {/** 注意点 两个请求对象* description: cxt 上下文有两个请求对象一个是request既koa本身的对象还有一个node封装的请求对象:req* param {type} */cxt.request // cxt.req/** 响应对象 两个响应对象* description: cxt.response 是koa封装的响应式对象* param {type} txt.res 是node封装的响应式对象* return: */cxt.body 使用cxt中的body返回数据 })3. 请求路径区分 koa通过创建的app对象注册中间件只能通过use方法 Koa并没有提供methods的方式来注册中间件也没有提供path中间件来匹配路径 但是在开发中我们如何将路径和method分离呢 方式一根据request自己来判断方式二使用第三方路由中间件 // path // app.use((cxt, next) { // if (cxt.path /users) { // } else if (cxt.path /login) { // cxt.body 登录成功 // } else { } // })// method app.use((cxt, next) {if (cxt.method POST) {cxt.body 登录成功} else { } })4. 路由 安装 npm install koa/router const koa require(koa); const router require(koa/router)const app new koa() // 1. 安装路由使用 npm i koa/routerconst userRouter new router({ prefix: /users }) //2. 注册路由中间件 userRouter.get(/, (cxt, next) {cxt.body 路由使用 })userRouter.get(/:id, (cxt, next) {const id cxt.params.idconsole.log(id);cxt.bodyid })// 3. 路由生效 app.use(userRouter.routes()) // allowedMethods路径或者方法匹配配置 app.use(userRouter.allowedMethods()) app.listen(8000, () {console.log(koa 服务器启动~) })注意allowedMethods用于判断某一个method是否支持某个请求或者路径是否正确 5 参数解析 get params方式 例子:/:idget query方式 例子: ?nameadminage18post json方式 例子 {name:admin pass:123456}post x-www-form-urlencodedpost form-data 注意点 下面路由统一注册为users const userRouter new router({ prefix: /users })5.1 params 与query解析 params参数 cxt.params.idquery参数 cxt.query userRouter.get(/:id, (cxt, next) {const id cxt.params.idcxt.body id})userRouter.get(/, (cxt, next) {const query cxt.querycxt.body query})5.2 body参数与urlencoded 解析 安装依赖 npm install koa-bodyparser;使用与注册 koa-bodyparser的中间件 app.use(bodyparser()) // 3. post/json body参数 // 安装库 npm install koa - bodyparser // app.use(bodyparser()) // userRouter.post(/, (cxt, next) { // const body cxt.request.body // cxt.bodybody // })// 4. urlencoded app.use(bodyparser()) userRouter.post(/, (cxt, next) {const body cxt.request.bodycxt.body body })5.3 form-data参数 解析body中的数据需要使用multer安装依赖npm install koa-multer; const upload multer({}) app.use(upload.any()) app.use((cxt,next){console.log(cxt.req.body); })6 . 文件上传 具体配置参考 const koa require(koa); const router require(koa/router)const multer require(koa/multer) const app new koa()app.listen(8000, () {console.log(koa 服务器启动~) })const userRouter new router({ prefix: /users }) /*** 5. post form-data */ let storage multer.diskStorage({destination: (req, file, cb) {cb(null, ./uploads/)},filename: (ctx, file, cb) {cb(null, file.originalname);} });const upload multer({storage })userRouter.post(/, upload.single(file), (cxt, next) {}) // 5. form-data 解析 需要使用multer app.use(userRouter.routes())7. 静态服务器 koa并没有内置部署相关的功能所以需要使用第三方库安装依赖 npm install koa-static const staticrequire(koa-static) const app new koa() app.use(static(./upload))8 响应数据 响应结果body将响应主体设置为以下之一 string 字符串数据Buffer Buffer数据Stream 流数据Object|| Array对象或者数组null 不输出任何内容如果response.status尚未设置Koa会自动将状态设置为200或204。 const userRouter new router({ prefix: /users }) userRouter.post(/, (cxt, next) {// 1.buffer 响应数据// cxt.bodyBuffer.from(hello node)// 2. 文件流// const readerStream fs.createReadStream(./upload/th5TYWK266.jpg)// cxt.type image/jpeg // 请求展示图片// cxt.body readerStream// 3.响应数组或者对象类型cxt.body{name:admin,password:123456} })9 错误处理 在做错误处理统一封装时cxt上下文可以触发一个emit事件因此可以使用app.on进行监听事件 const koa require(koa); const router require(koa/router) const app new koa() app.listen(8000, () {console.log(koa 服务器启动~) }) const userRouter new router({ prefix: /users })userRouter.get(/, (cxt, next) {const isAuth falseif (isAuth) {cxt.body 登录成功返回token} else {// cxt.body {// code: 1001,// message: 没有进行授权// }// 统一处理错误cxt.app.emit(errorEvent, 1001,cxt)} })app.on(errorEvent, (code,cxt) {let message switch (code) {case 1001:message 没有授权breakdefault: 1002message 成功}const body {code,message}cxt.bodybody }) app.use(userRouter.routes())
http://www.zqtcl.cn/news/383689/

相关文章:

  • 网站建设 杭州市萧山区网页此站点不安全
  • 微网站免费开发平台钟表珠宝商城网站建设
  • 帮建网站的人wordpress广告栏
  • 怎么学建网站教做甜品网站
  • 建网站 服务器需要安装 tomcat安徽城乡建设 厅网站
  • 建筑公司企业简介模板关于网站优化的文章
  • 绥化网站建设兼职互联网大厂设计哪家口碑好
  • 成交型网站建设公司六安亿联网络科技有限公司
  • 优秀行业网站广州网站建设怎么样
  • 南宁建设信息网seo推广公司排名
  • 凯发网站国外网站博客网站也可以做引流
  • 网站设计要学什么vestacp wordpress
  • 模板建站代理3免费做网站
  • 酒店官方网站的功能建设百度网盟推广案例
  • 屯昌网站建设wap网站搭建
  • 毕设做音乐网站重庆正云环境网页制作
  • 免费网站建站w深圳罗湖建网站
  • 创建一个网站一般步骤有哪些互动网站策划
  • 文化传媒 网站设计宿迁网站建设价格
  • 网站开发五人分工是网站推广的案例
  • 海外网站制作seo技术
  • 包头网站建设熊掌号免费行情100个软件
  • 江门网站制作维护电子商务网站运营与管理
  • 动画网页制作网站常用的网络推广方法有
  • 一个设计网站多少钱sku电商是什么意思
  • 做网站优化有前景吗emlog和wordpress
  • 30天网站建设实录 pdf货源网站程序
  • 做企业网站需要多久培训机构 网站建设
  • 商业网站初期建设资金预算哈尔滨视频制作公司
  • 网站建设教程网哪个好wordpress 侧边栏 固定