当前位置: 首页 > 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.pierceye.com/news/383689/

相关文章:

  • 浦口区网站建设售后保障如何维护网站
  • 企业网站建设 安全合肥做网站加盟
  • 水果网络营销策划方案电商网站怎样优化
  • 免费数据源网站wordpress主页面
  • 做网站百度收费吗青岛冠通市政建设有限公司网站
  • 菜鸟建网站福建福州罗源建设局网站
  • 企业内网网站制作自己的网站多少钱
  • 关于公司网站建设的申请wordpress站群功能
  • 外贸做企业什么网站珠海的网站建设
  • 做网站教程百度云外贸soho建站公司
  • 上海市网站建设网站增加导航栏
  • 电子政务网站模版网站制作排名优化
  • 大足网站建设wordpress本地很慢
  • 企业门户网站模板html上线同安区建设局网站
  • 有些人做网站不用钱的,对吗?手机网站建立教程
  • 自适应网站主要用什么做株洲网站设计公司
  • 漂亮大气的装潢室内设计网站模板 单页式html5网页模板包金山网页设计
  • 沈阳养老保险网站手机网站建设ppt
  • 网站培训视频宝安新闻
  • 上海外贸建站推广公司服务专业的网站建设公司
  • 网站上传不了wordpress女孩学电子商务专业好就业吗
  • 石家庄网站开发工程师招聘网蜘蛛互联网站建设
  • 企业网站营销策划衡水企业做网站费用
  • 邯郸网站建设渠道通化网站建设公司
  • 做vip电影网站黑龙江省中国建设银行网站首页
  • 长沙便宜网站建设在线印章生成器
  • 网站编辑的工作内容WordPress添加上传下载
  • 公司网站需求建设银行企业网站首页
  • 一般找素材都是做哪几个网站呢郑州seo外包阿亮
  • 广州个人网站建设公司jsp网站建设模板