03 Koa框架的路由与 RESTful API 最佳实践

3-1 路由简介

3-2 编写koa路由中间件

3-3 使用koa-router 实现路由

3-4 http 中 options 方法的作用

3-5 RESTful APIz最佳实践——增删改查应该返回什么响应?

3-1 路由简介

路由是什么?

  • 决定了不同URL是如何不同地执行的
  • 在 Koa中,是一个中间件

编写koa路由中间件

  • 处理不同地URL
  • 处理不同地HTTP 方法
  • 解析 URL 地参数
const koa = require('koa')
const app = new koa()

app.use(async (ctx) => {
    if (ctx.url === '/') {
        ctx.body = '这是主页'
    } else if (ctx.url === '/users') {
        if (ctx.method === 'GET') {
            ctx.body = '这是用户列表页'
        } else if (ctx.method === 'POST') {
            ctx.body = '创建用户'
        } else {
            ctx.status = 405
        }
    } else if (ctx.url.match(/\/users\/\w+/)) {
        console.log(ctx.url.match(/\/users\/\w+/))
        const userId = ctx.url.match(/\/users\/(\w+)/)[1]
        ctx.body = `这是用户 ${userId}`
    } else {
        ctx.status = 404
    }
})

app.listen(3000)

在这里插入图片描述

3-3 使用koa-router 实现路由

  • 更优雅地实现路由基本功能
  • 演示一些高级路由功能,如前缀,多中间件

安装

npm i koa-router --save

实现路由地基本功能

const koa = require('koa')
const Router = require('koa-router')
const app = new koa()
const router = new Router()

router.get('/', (ctx) => {
    ctx.body = '这是主页'
})

router.get('/users', (ctx) => {
    ctx.body = '这是用户列表'
})

router.post('/users', (ctx) => {
    ctx.body = '创建用户'
})

router.get('/users/:id', (ctx) => {
    ctx.body = `这是用户 ${ctx.params.id}`
}) 
app.use(router.routes())

app.listen(3000)
  1. const Router = require(‘koa-router’)
  2. const router = new Router()
  3. 编写路由
  4. 注册路由 app.use(router.routes())

嵌套路由’/users/:id’,通过ctx.paramas.id获取

高级路由功能

路由前缀

const koa = require('koa')
const Router = require('koa-router')
const app = new koa()
const router = new Router()
const usersRouter = new Router({prefix: '/users'})

router.get('/', (ctx) => {
    ctx.body = '这是主页'
})

usersRouter.get('/', (ctx) => {
    ctx.body = '这是用户列表'
})

usersRouter.post('/', (ctx) => {
    ctx.body = '创建用户'
})

usersRouter.get('/:id', (ctx) => {
    ctx.body = `这是用户 ${ctx.params.id}`
}) 

app.use(router.routes())
app.use(usersRouter.routes())

app.listen(3000)
  1. const usersRouter = new Router({prefix: ‘/users’})
  2. 编写路由
  3. app.use(usersRouter.routes()) 注册路由

多中间件路由

const koa = require('koa')
const Router = require('koa-router')
const app = new koa()
const router = new Router()
const usersRouter = new Router({prefix: '/users'})

const auth = async (ctx, next) => {
    if (ctx.url !== '/users') {
        ctx.throw(401)
    }
    await next()
}
router.get('/', (ctx) => {
    ctx.body = '这是主页'
})

usersRouter.get('/', auth, (ctx) => {
    ctx.body = '这是用户列表'
})

usersRouter.post('/', auth, (ctx) => {
    ctx.body = '创建用户'
})

usersRouter.get('/:id', auth, (ctx) => {
    ctx.body = `这是用户 ${ctx.params.id}`
}) 

app.use(router.routes())
app.use(usersRouter.routes())

app.listen(3000)

在这里插入图片描述
在这里插入图片描述
通过把中间件添加在路由中模拟权鉴。

3-4 http 中 options 方法的作用

  • 检测服务器所支持的请求方法
    在这里插入图片描述
    这里的Allow的value即是支持的方法。
  • CORS 中的预检请求

allowedMethods 的作用

app.use(usersRouter.allowedMethods())
  • 响应 options 方法,告诉它所支持的请求方法
    在这里插入图片描述

  • 相应地返回405(不允许)与501(未实现)

3-5 RESTful APIz最佳实践——增删改查应该返回什么响应?

const koa = require('koa')
const Router = require('koa-router')
const app = new koa()
const router = new Router()
const usersRouter = new Router({prefix: '/users'})

router.get('/', (ctx) => {
    ctx.body = '这是主页'
})

usersRouter.get('/', (ctx) => {
    ctx.body =[{name: '李雷'}, {name: '韩梅梅'}]
})

usersRouter.post('/',  (ctx) => {
    ctx.body =[{name: '李雷'}]
})

usersRouter.get('/:id',  (ctx) => {
    ctx.body =[{name: '李雷2'}]
}) 

usersRouter.put('/:id',  (ctx) => {
    ctx.body =[{name: '李雷2'}]
}) 

usersRouter.delete('/:id',  (ctx) => {
    ctx.status = 204
}) 

app.use(router.routes())
app.use(usersRouter.routes())
app.use(usersRouter.allowedMethods())

app.listen(3000)
  • 查询get
  • 新建 post
  • 修改 put
  • 删除 delete
  • 增、查、改返回一个数组,删返回204
Node.js 和 Koa 是构建RESTful API服务器的强大组合。Koa是一个轻量级的中间件库,它是Express框架的替代品,更注重于简洁和错误处理。以下是创建一个简单的Node.js + Koa RESTful API服务器的基本步骤: 1. **安装依赖**: 首先需要安装Node.js和Koa。使用npm(Node Package Manager)全局安装Koa: ``` npm install -g koa ``` 然后,在项目目录下初始化一个新的Node应用并安装Koa和其他必要的包(如body-parser处理请求体): ``` npm init -y npm install koa body-parser ``` 2. **创建基本结构**: 创建一个`index.js`文件,作为入口点: ```javascript const Koa = require('koa'); const bodyParser = require('body-parser'); const app = new Koa(); // 使用body-parser中间件解析JSON和URL-encoded数据 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); // 定义路由 app.use(async ctx => { if (ctx.method === 'GET') { // GET请求示例,返回欢迎消息 ctx.body = { message: 'Welcome to our RESTful API!' }; } else { // 对非GET请求返回状态码405(Method Not Allowed) ctx.status = 405; ctx.body = { error: 'Invalid method.' }; } }); // 启动服务器 const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); }); ``` 3. **运行服务**: 运行`node index.js`命令启动服务器。 现在,当你访问`http://localhost:3000`(假设端口为3000)时,会看到一个GET请求的欢迎消息。你可以通过发送其他HTTP方法(POST、PUT、DELETE等),测试API的不同部分,并查看如何响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值