企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 路由中间件定义 <br> 路由中间件统一写在 ``middleware`` 目录下,同样要导出一个函数,如果路由指定了中间件,那么访问路由之前会先进过这里 ``` // 路由中间件 const checkLogin = (ctx,next,error) => { const token = ctx.header?.authorization?.split('Bearer ')[1] || '' if(ctx.validateToken(token)){ next() }else{ error('非法请求,或Token过期') } } module.exports = checkLogin ``` > ``ctx`` 代表上下文,可从中获取 ``headers`` ``request``等 ``` const checkLogin = async (ctx,next,error) => { let userInfo = await ctx.RDb().get(ctx.header.token || '') if(userInfo){ next() }else{ error('非法请求,或Token过期') } } module.exports = checkLogin ``` <br> > ``ctx`` 里目前还挂载了如下方法 * ctx.validateToken() // JWT校验函数,需传入一个TOKEN * ctx.Db() // 数据库操作函数,用法和控制器里相同 * ctx.RDb() // Redis操作函数,用法和控制器里相同 * ctx.EDb() // ElasticSearch操作函数,用法和控制器里相同 * ctx.MDb() // MongoDB操作函数,用法和控制器里相同 * ctx.Log4j() // 日志输出函数,用法和控制器里相同 <br> > ``next()`` 函数代表向下执行不阻拦 > ``error()`` 函数可以阻断程序向下执行并抛出异常,可以传三个参数,第一个参数设置抛出异常的消息内容,第二个参数设置错误码,第三个参数设置状态码。默认参数如下 ``` (msg = '请求错误',errorCode = 30000,statusCode = 400) ```