二 Koa2框架中 Get / Post 接收参数

5 篇文章 0 订阅

一 实现跨域访问

1.如果希望开发的API被前端项目调用(例如Vue),则,第一步必然是实现跨域,Koa2框架中实现跨域访问与Express中略有不同,需要安装koa2-cors中间件,借助koa2-cors来实现跨域

npm install koa2-cors -save

安装完成之后在app.js文件中引入,并配置相关内容

const cors = require('koa2-cors');
app.use(
  cors({
      origin: function(ctx) { //设置允许来自指定域名请求
           if (ctx.url === '/test') {
               return '*'; // 允许来自所有域名请求
           }
           return 'http://localhost:8080'; //只允许http://localhost:8080这个域名的请求

          //return '*'; // 允许来自所有域名请求
      },
      maxAge: 5, //指定本次预检请求的有效期,单位为秒。
      credentials: true, //是否允许发送Cookie
      allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法'
      allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
      exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
  })
);

以上是基础配置,通过origin函数,可实现仅允许指定域名访问API,更多参数及配置请参考koa2-cors

二 自定义一个API接口

1.我们在routes文件夹下创建一个test.js文件,参考项目给出的实例,写入如下内容

const router = require('koa-router')()
router.prefix('/test')  //定义路由名称
//定义一个默认的Get API
router.get('/', function (ctx, next) {
  ctx.body = '这是test.js的默认接口!'
})
module.exports = router

2.参考框架给出的默认示例,在app.js中使用这个test.js路由文件

const test= require('./routes/test')
app.use(test.routes(), test.allowedMethods())

此处的用法与Express框架的用法区别不大,不难理解,不过需要注意的是,路由名称是在test.js路由文件中。
如果调用的话,则可以访问 http://localhost:3000/test,以上步骤没错的话,则会出现一下内容。
在这里插入图片描述
从以上的简单实例中来看,ctx.body的值相当于Express框架中的res.send(),ctx被称之为上下文。当我们给ctx.body赋值,框架默认API执行结束且返回数据。那么当我们不给ctx.body赋值时会怎么样?我们去掉赋值代码看看。

router.get('/', function (ctx, next) {
  // 注释调ctx.body
  // ctx.body = '这是test.js的默认接口!'
})

访问接口http://localhost:3000/test,
在这里插入图片描述

再来看看终端控制台给出的日志内容。
在这里插入图片描述
终端控制台直接给出了404,这表示什么不需要我再多说了。

三 接受Get参数

1.通过以上实例,我们已经简单了解到怎么返回一些数据,下面来添加一个带有参数的GetAPI,来看看怎么获取Get请求传递的参数。

router.get('/getinfo', function (ctx, next) {
  console.log(ctx.query);
  ctx.body = 'this is a users/bar response'
})

然后访问http://localhost:3000/test/getinfo?id=1&name=shawn
控制台输出的内容如下:
在这里插入图片描述
可以看到,ctx.query已经将Get请求的参数转换成了一个对象直接返回给了我们,我们直接接受然后使用即可。

2.再来看看Get请求中的param传值,将接口修改如下:

router.get('/getinfo/:id/:name', function (ctx, next) {
  console.log(ctx.params);
  ctx.body = 'this is a users/bar response'
})

再试着访问http://localhost:3000/test/getinfo/1/shawn
监控一下控制台输出的内容
在这里插入图片描述
我们使用ctx.params可以接受Get接口传递的param参数,请注意区分两种接口的定义方式。

四 接受Post参数

1.本地Post接口的测试模拟,我这边会使用一个测试工具:BB-API,方便进行测试。
2.编写一个Post请求接口:

router.post('/add', function (ctx, next) {
  console.log(ctx.request.body); //使用ctx.request.body接收post请求传递的参数
  ctx.body = ctx.request.body
})

BB-AP操作如下,使用Post方式访问http://localhost:3000/test/add接口
在这里插入图片描述
我们在终端控制台可以看到一下日志内容:
在这里插入图片描述
由此,我们知道,获取Post接口传递的参数,使用ctx.request.body即可。

总结

1.需要注意,当我们直接中输出ctx的值,是找不到以上所说的属性值的。
以上只是Koa2框架中Post/Get获取参数值的简单用法,更多详细的原理和用法请参考Koa2官方文档

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Koa2框架使用MySQL2连接数据库的步骤如下: 1. 首先,安装所需的依赖包。执行以下命令以安装koa2和mysql2: ``` npm install koa@2 mysql2 ``` 2. 在你的代码引入所需的模块和配置数据库连接。以下是一个简单示例: ```javascript const Koa = require('koa'); const mysql = require('mysql2/promise'); const app = new Koa(); // 创建数据库连接池 const pool = mysql.createPool({ host: 'localhost', // 数据库主机名 user: 'root', // 数据库用户名 password: 'password', // 数据库密码 database: 'mydatabase' // 数据库名称 }); // 在间件使用数据库连接 app.use(async (ctx, next) => { try { // 从连接池获取连接 const connection = await pool.getConnection(); // 执行查询等操作 const [rows, fields] = await connection.execute('SELECT * FROM mytable'); // 释放连接 connection.release(); // 将查询结果传递给下一个间件或响应给客户端 ctx.body = rows; } catch (err) { // 错误处理 console.error(err); ctx.status = 500; ctx.body = 'Internal Server Error'; } }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 在上面的示例,我们使用`mysql2/promise`模块创建了一个数据库连接池,并在每个请求的间件使用连接池来执行数据库操作。请根据你的实际情况修改数据库的连接信息和查询语句。 这只是一个简单的示例,你可以根据自己的需求进行更复杂的操作和优化。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值