node.js - 一个关于koa-router路由全匹配问题

查看:706
本文介绍了node.js - 一个关于koa-router路由全匹配问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

最近想使用koa给公司做个网站(刚接触koa),在使用路由的时候发现koa-router中的router.use()并不能像express的路由中router.use()一样,匹配当前层级及以后层级路由,例如

express 中

router.use('/user',adminAuth,userRouter)

会自动为/user以后的所有路由应用登录验证函数aminAuth

koa-router中

router.use('/user',adminAuth,userRouter)

只会为/user匹配使用adminAuth,之后的/user/:id,/user/....等都不会执行adminAuth

想到了koa的app.use是一个全局匹配的函数,于是就使用了app.use()

app.use(async (ctx,next)=>{
    if(ctx.url.indexOf('/user')>=0){
        adminAuth()
    }
    await next()
})

可以实现为所有/user路由登录验证,但是觉得那里不对

注:多个路由/user,/api/等使用的switch代替if

希望各位能指点下,刚接触koa,谢谢

解决方案

你的写法是这样的吗?.use.verb是定义在同一个router实例下的吗

// app.js
const app = require("koa")
const router = require("koa-router")
router.use('/user',middleware)
router.get('/user/:id')
router.get('/user/xxxxx')
app.use(router.routes())
app.use(router.allowedMethods())

这样子没问题的,你搞得我都快怀疑人生了.

这篇关于node.js - 一个关于koa-router路由全匹配问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆