前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iKcamp|基于Koa2搭建Node.js实战(含视频)☞ HTTP请求

iKcamp|基于Koa2搭建Node.js实战(含视频)☞ HTTP请求

作者头像
iKcamp
发布2018-07-31 16:48:30
6220
发布2018-07-31 16:48:30
举报
文章被收录于专栏:iKcamp

POST/GET请求——常见请求方式处理

?? iKcamp 制作团队

原创作者:大哼阿干三三小虎胖子小哈DDU可木晃晃 文案校对:李益大力萌AuDDU小溪里小哈 风采主播:可木阿干AuDDU小哈 视频剪辑:小溪里 主站运营:给力xixty 教程主编:张利涛


视频地址:https://www.cctalk.com/v/15114357765870

文章

Http 请求

在学习了 koa-router 之后,我们就可以用它来处理一些常见的请求了,比如 POST/GET

koa-router 提供了 .get.post.put.del 接口来处理各种请求,但实际业务上,我们大部分只会接触到 POSTGET,所以接下来只针对这两种请求类型来说明。

当我们捕获到请求后,一般都需要把请求带过来的数据解析出来。数据传递过来的方式一般有三种:

请求参数放在 URL 后面

代码语言:javascript
复制
http://localhost:3000/home?id=12&name=ikcamp

koa-router 封装的 request 对象,里面的 query 方法或 querystring 方法可以直接获取到 Get 请求的数据,唯一不同的是 query 返回的是对象,而 querystring 返回的是字符串。

修改 app.js,我们加入解析方式:

代码语言:javascript
复制
  const Koa = require('koa')
  const router = require('koa-router')()
  const app = new Koa()

  router.get('/', async(ctx, next) => {
    ctx.response.body = `<h1>index page</h1>`
  })

  router.get('/home', async(ctx, next) => {
    console.log(ctx.request.query)
    console.log(ctx.request.querystring)
    ctx.response.body = '<h1>HOME page</h1>'
  })

  router.get('/404', async(ctx, next) => {
    ctx.response.body = '<h1>404 Not Found</h1>'
  })

  // add router middleware:
  app.use(router.routes())

  app.listen(3000, () => {
    console.log('server is running at http://localhost:3000')
  })

运行代码,并通过浏览器访问 http://localhost:3000/home?id=12&name=ikcamp,然后打开控制台会看到下面的输出内容:

代码语言:javascript
复制
{ id: '12', name: 'ikcamp' }
id=12&name=ikcamp

请求参数放在 URL 中间

代码语言:javascript
复制
http://localhost:3000/home/12/ikcamp

这种情况下,解析方式肯定与上面的不一样了,koa-router 会把请求参数解析在 params 对象上,我们修改 app.js 文件,增加新的路由来测试下:

代码语言:javascript
复制
  // 增加如下代码
  router.get('/home/:id/:name', async(ctx, next)=>{
    console.log(ctx.params)
    ctx.response.body = '<h1>HOME page /:id/:name</h1>'
  })

运行代码,并通过浏览器访问 http://localhost:3000/home/12/ikcamp,然后查看下控制台显示的日志信息:

代码语言:javascript
复制
{ id: '12', name: 'ikcamp' } 

请求参数放在 body

当用 post 方式请求时,我们会遇到一个问题:post 请求通常都会通过表单或 JSON 形式发送,而无论是 Node 还是 Koa,都 没有提供 解析 post 请求参数的功能。

koa-bodyparser 说:『是时候登场了!』

首先,安装 koa-bodyparser 包:

代码语言:javascript
复制
npm i koa-bodyparser -S

安装完成之后,我们需要在 app.js 中引入中间件并应用:

代码语言:javascript
复制
  const Koa = require('koa')
  const router = require('koa-router')()
  const bodyParser = require('koa-bodyparser')
  const app = new Koa()

  app.use(bodyParser())

  router.get('/', async(ctx, next) => {
    ctx.response.body = `<h1>index page</h1>`
  })

  router.get('/home', async(ctx, next) => {
    console.log(ctx.request.query)
    console.log(ctx.request.querystring)
    ctx.response.body = '<h1>HOME page</h1>'
  })

  router.get('/home/:id/:name', async(ctx, next)=>{
    console.log(ctx.params)
    ctx.response.body = '<h1>HOME page /:id/:name</h1>'
  })

  router.get('/404', async(ctx, next) => {
    ctx.response.body = '<h1>404 Not Found</h1>'
  })

  app.use(router.routes())

  app.listen(3000, () => {
    console.log('server is running at http://localhost:3000')
  })

然后我们来试着写一个简单的表单提交实例。修改 app.js 增加如下代码,实现增加表单页面的路由:

代码语言:javascript
复制
  // 增加返回表单页面的路由
  router.get('/user', async(ctx, next)=>{
    ctx.response.body = 
    `
      <form action="/user/register" method="post">
        <input name="name" type="text" placeholder="请输入用户名:ikcamp"/> 
        <br/>
        <input name="password" type="text" placeholder="请输入密码:123456"/>
        <br/> 
        <button>GoGoGo</button>
      </form>
    `
  })

继续修改 app.js 增加如下代码,实现 post 表单提交对应的路由:

代码语言:javascript
复制
  // 增加响应表单请求的路由
  router.post('/user/register',async(ctx, next)=>{
    let {name, password} = ctx.request.body
    if( name === 'ikcamp' && password === '123456' ){
      ctx.response.body = `Hello, ${name}!`
    }else{
      ctx.response.body = '账号信息错误'
    }
  })

常见的几种请求,以及相应的参数传递解析,我们已经学习过了。下一节中,我们会把项目整理重构下,做个分层,并引入视图层。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • POST/GET请求——常见请求方式处理
  • ?? iKcamp 制作团队
  • 文章
  • Http 请求
    • 请求参数放在 URL 后面
      • 请求参数放在 URL 中间
        • 请求参数放在 body 中
          • koa-bodyparser 说:『是时候登场了!』
      相关产品与服务
      消息队列
      腾讯云消息队列 TDMQ 是分布式架构中的重要组件,提供异步通信的基础能力,通过应用解耦降低系统复杂度,提升系统可用性和可扩展性。TDMQ 产品系列提供丰富的产品形态,包含 CKafka、RocketMQ、RabbitMQ、Pulsar、CMQ 五大产品,覆盖在线和离线场景,满足金融、互联网、教育、物流、能源等不同行业和场景的需求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档