我在开发一个egg插件,这个插件依赖了另外一个包,这包使用了koa,它有自己的路由,我现在的做法是在插件里面使用了koa-mount把它挂载到了egg app上了,eggApp.use(mount(’/’, plugin.app )); 不知道这样做好不好,求正确的做法。依赖的这个包的自己的几个路由,我打算写在配置文件里面,可以自行修改配置
你真的需要这一个包么?
是一个提供oidc服务的包
一个授权协议,可以理解成oauth2
@atian25 如果实在想这么做,可以吗。是不是严格意义上不能这么做,只不过这个OIDC扩展包里面提供了路由
只是觉得这个库设计的可能有点过度,应该提供核心功能,把功能接口暴露出来,给外面调用更好。
具体情况具体分析吧,你可以分析下他源码
好,谢谢
你看看他的源码,看看是不是有更底层的库可以直接用
好的
@atian25 我现在的做法是把依赖的扩展包里面的koaApp实例拿到然后再拿到koaApp实例里面的router stack放在一个oidc对象里面。最后再在egg的router.js里面写router.post(’/token’, app.oidc.token()) 这个token()就是我从原来扩展包里面的koaApp里面拿到的路由中间件。这样实现可以显示的注册路由是不是要好些
let middlewares = {};
const stacks = oidcProvider.app.middleware[1].router.stack
for ( let i in stacks ) {
if (stacks[i].methods.includes('OPTIONS'))
continue;
middlewares[stacks[i].name] = () => {
return stacks[i].stack;
}
}
app.router.post('/token', ...middlewares.token());
按官方这样吧,作为一个中间件的方式去接入,具体还是要分析源码,不确定有没有其他坑。 https://github.com/panva/node-oidc-provider/blob/master/docs/configuration.md#to-a-koa-application
好的,谢谢