我们每次在使用koa-router时都要使注册两个中间件:router.routes()和router.allowMethods()。关于router.routes()的作用,我们都知道是用来注册路由使路由生效;而router.allowMethods()的作用一直没搞明白,现在我们就来了解一下他的作用。
我们先看有和没有router.allowedMethods()的区别:
1. 有router.allowedMethods()的情况
const koa = require('koa');
const Router = require('koa-router')
const app = new koa()
const userRouter = new Router({prefix: '/user'})
userRouter.get('/', ctx => {
ctx.body = 'hello'
})
app.use(userRouter.routes())
app.use(userRouter.allowedMethods())
app.listen('8000', () => {
console.log('启动成功')
})
此时服务端只有get请求接口,如果我们此时请求post请求会发生什么情况呢?
可以看到此时状态码为
405, 响应内容为 Method Not Allowed;并且响应头中添加了 allow 字段,值为允许的请求方式
2. 无router.allowedMethods的情况
const koa = require('koa');
const Router = require('koa-router')
const app = new koa()
const userRouter = new Router({prefix: '/user'})
userRouter.get('/', ctx => {
ctx.body = 'hello'
})
app.use(userRouter.routes())
// app.use(userRouter.allowedMethods())
app.listen('8000', () => {
console.log('启动成功')
})
此时服务端也是只有get请求接口,如果我们此时请求post请求会发生什么情况呢?
可以看到此时状态码为 404, 响应内容为 Not Found;并且响应头没有添加允许的请求方式
总结: 在加了router.allowedMethods()中间件情况下,如果接口是get请求,而前端使用post请求,会返回405 Method Not Allowed ,提示方法不被允许 ,并在响应头有添加允许的请求方式;而在不加这个中间件这种情况下,则会返回 404 Not Found找不到请求地址,并且响应头没有添加允许的请求方式 。