Swagger Sails JS

17

如何在sails js项目中集成 swagger 和 swagger-ui?

我可以在哪里找到相关信息,或者其他方式来注释使用sails生成的api?

谢谢!


太好了,让我看看你的项目。谢谢! - wchopite
Strongloop提供了开箱即用的功能。 - Anoop Thiruonam
5个回答

34

大约一周前,我在寻找解决方案时发现相关信息有些分散。以下是我如何将swagger和swagger-ui集成到我的sails 0.11.x项目中:

1. 安装sails-swagger

npm install --save sails-swagger

这个提供了一个钩子,将动态生成Swagger文档。不幸的是,它只兼容Sails 0.12.x(在发布此帖时是rc版本)。因此,要使其与0.11.x正常工作,您必须扩展SwaggerController并在config / installedHooks.js中覆盖钩子的名称 (问题引用)

api/controllers/SwaggerController.js

'use strict';

/**
 * This is a temp fix while one sails 11.x
 * @see https://github.com/tjwebb/sails-swagger/issues/3
 */
var _ = require('lodash');
var _super = require('sails-swagger/dist/api/controllers/SwaggerController');

_.merge(exports, _super);
_.merge(exports, {
  _config: {
    actions: false,
    shortcuts: false,
    rest: false
  }
});

config/installedHooks.js

'use strict';

/**
 * This is a temp fix while one sails 11.x
 * @see https://github.com/tjwebb/sails-swagger/issues/3
 */
module.exports.installedHooks = {
  'sails-swagger': {
    'name': 'swagger'
  }
};

最后,请按照文档提供钩子的配置。

config/swagger.js

'use strict';

module.exports.swagger = {
  /**
   * require() the package.json file for your Sails app.
   */
  pkg: require('../package')
};

2. 安装Swagger UI

npm install --save-dev swagger-ui@2

有几种方法来处理这个问题。你可以使用原始的swagger-ui模块并将其dist中的所有内容添加到你的构建过程中。但是我选择将它复制到我的项目中,因为我打算对界面进行一些自定义。

mkdir assets/docs
cp -r node_modules/swagger-ui/dist/* assets/docs/

注意(2017年3月26日):Swagger-UI v3.x已经使用React进行了重建(耶!),但是目前很难与Sails轻松集成。

3. 配置Swagger-UI

最后,您需要将Swagger-UI指向您动态生成的Swagger文档。Swagger文档的默认路由为/swagger/doc,因此您可以在Swagger-UI配置中明确设置它。

assets/docs/index.html

<script type="text/javascript">
    $(function () {
      var url = '/swagger/doc';

      // Pre load translate...
      if(window.SwaggerTranslator) {
        window.SwaggerTranslator.translate();
      }
      window.swaggerUi = new SwaggerUi({
        url: url,
        // ...removed for brevity
</script>

4. 利润

现在你可以在浏览器中导航到/docs,并查看你美丽的文档。

sails-swagger-ui


@Vanuan:如果不使用默认设置,可以在 blueprints.js 中禁用它们。这将从 Swagger 文档中删除所有内容。 - Mandeep Singh
如果您使用了“--no-frontend”选项安装,则此方法无效。 - Matt Westlake
1
node_modules/swagger-ui/dist/不再包含index.html文件,只有4个文件。 - Janki Gadhiya
2
如果你使用了 --no-frontend 选项来生成项目,那么你需要将 node_modules/swagger-ui/dist/ 目录复制到 .tmp/public/docs(例如通过 grunt 任务). - Alexey
如何在Sails v1.0上运行此程序? - brabertaser19
显示剩余2条评论

4
我找到了一个解决方案,使用swagger-ui。我在assets sails文件夹中创建了一个名为docs的文件夹,将swagger-ui内容放在其中,并编辑了swagger.json文件。然后,我执行了sails lift命令。现在可以通过http://ip_address:1337/docs访问文档。我正在使用sails v-0.11.0版本。

1
也许需要更多的信息 - 最简单的方法是下载zip文件并将/dist文件夹内容放在您想要Swagger UI存在的任何位置。之后,您唯一需要更改的是URL - sails-swagger包在'/swagger/doc'处生成Swagger文件。之后这个工作非常好。 - agiaLab

2

在自动生成文档方面,您可以查看此库,我认为它更好地解决了问题,并从控制器和路由自动生成swagger.json文件。

npm install sails-hook-swagger-generator --save

如果你已经在运行sails lift之前创建了swagger文件夹,那么只需简单地运行sails lift并检查swagger文件夹即可。

更新

现在该工具支持OAS 3.0版本,并且还为操作和action2s提供了更好的文档。

如需了解更多有关配置的信息,请查看这个仓库


1
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - GhostCat
如何将Swagger UI集成到某个路由上,以便在浏览器中查看JSON? - Pavan
你可以查看这个链接 https://swagger.io/docs/swagger-tools/#download-33 并使用生成的JSON作为URL路径。@Pavan - Theophilus Omoregbee
1
顺便提一下,Theo 是链接帆钩的作者。 - Tom Saleeba
@TheophilusOmoregbee 我在哪里可以看到 Swagger?当我访问这个链接 http://ip_address:1337/docs 时,什么都没有显示。 - user7396942
@x-rw 目前该库不支持查看生成的 Swagger Json 文档,这里有一个问题需要跟进:https://github.com/theoomoregbee/sails-hook-swagger-generator/issues/28 但是你可以配置它以使用 Swagger 文档 UI。 - Theophilus Omoregbee

0

安装

$ npm install sails-swagger --save

配置

    // config/swagger.js
module.exports.swagger = {
  /**
   * require() the package.json file for your Sails app.
   */
  pkg: require('../package'),
  ui: {
    url: 'http://swagger.balderdash.io'
  }
};

安装和配置Swagger后,您可以在/swagger/doc路由上找到文档输出。


0
安装:npm i @logisticinfotech/sails-hook-actions2-swagger,然后在浏览器中打开http://localhost:1337/swagger
只有这些,很酷。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接