weixin_39640417
weixin_39640417
2020-12-01 18:57

root cause: compatible with router.use()

根本问题在于:我代码的结构 app.js: router.use('/auth', auth.routes()); router.use('/api', api.routes()) api.js:


wrapper(router);
router.swagger(...)
// map all static methods at classes for models
router.map(Product);

期待的表现: - [x] API的访问解析正确,例如:访问/api/product 可以正确返回product列表 --完美 - [x] swagger-html的访问解析正确,例如: /api/swagger-html能显示文档页面 --几乎完美,可以显示 - [ ] 默认的swagger-json的地址访问正确,例如:默认取得的是/api/swagger-json文件 -- 用昨天的修改能workaround,但是能默认加上对应的路径/api就完美了。 - [ ] 默认的swagger文档的地址正确,文档页面中product文档的路径应该是/api/product --现在是/product,这个希望能修改,到底map函数是神来之笔,非常棒。如果能和router.use()兼容就完美了。

加油⛽️,我有空了争取钻一下router.use代码,找找解决方法

该提问来源于开源项目:Cody2333/koa-swagger-decorator

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • weixin_39640417 weixin_39640417 5月前
    
    const buildSwaggerJson = (options) => {
      const { title, description, version } = options || {};
      const swaggerJSON = init(title, description, version);
      _.chain(apiObjects).map((value) => {
        if (!Object.keys(value).includes('request')) throw new Error('缺少 request 字段');
    
        const { path, method } = value.request;
    

    是不是上面这行path再加一下'api'前缀对应的内容(比如:api)?

    点赞 评论 复制链接分享
  • weixin_39648430 weixin_39648430 5月前

    router.swagger 添加了参数 prefix, 只需要在api.js中指定prefix即可解决以上问题 eg.

    
    router.swagger({
      prefix: '/api', 
      swaggerHtmlEndpoint: '/swagger-html', 
      swaggerJsonEndpoint: '/swagger-json',
      ...
    });
    
    点赞 评论 复制链接分享
  • weixin_39640417 weixin_39640417 5月前

    almost done. 就是prefix还是会在默认的swaggerJsonEndpoint前多加一个/api,变成:/api/api/swagger-son

    点赞 评论 复制链接分享
  • weixin_39648430 weixin_39648430 5月前

    你设置 swaggerJsonEndpoint: '/swagger-json',prefix: '/api'应该就可以了吧??不会多一个/api吧

    点赞 评论 复制链接分享
  • weixin_39640417 weixin_39640417 5月前

    那样也不行,因为实际生成json文件的位置是swaggerJsonEndpoint定义的,比如‘/swagger-json’;但是如果加prefix, swagger的页面就去/api/swagger-json位置上找对应的文件。所以就不行。

    点赞 评论 复制链接分享
  • weixin_39648430 weixin_39648430 5月前

    不需要啊,你在嵌套路由里面定义swagger,添加prefix说明现在所处的路由位置,路径就是基于嵌套路由的路径了,具体请参考koa-swagger-decorator-example

    点赞 评论 复制链接分享

相关推荐