关于egg开发插件的一些问题
发布于 6 年前 作者 acodercat 3359 次浏览 来自 问答

我在开发一个egg插件,这个插件依赖了另外一个包,这包使用了koa,它有自己的路由,我现在的做法是在插件里面使用了koa-mount把它挂载到了egg app上了,eggApp.use(mount(’/’, plugin.app )); 不知道这样做好不好,求正确的做法。依赖的这个包的自己的几个路由,我打算写在配置文件里面,可以自行修改配置

12 回复

你真的需要这一个包么?

是一个提供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

好的,谢谢

回到顶部