使用带有swagger节点项目

时间:2018-02-01 14:40:48

标签: node.js express async-await swagger

我使用 swagger-node https://github.com/swagger-api/swagger-node)生成了一个应用。

自动招摇路由器无法识别具有异步前缀的控制器中间件功能。我必须在中间件中使用Promises。

有没有办法在swagger.yaml中列出的中间件中使用async?

在swagger.yaml:

paths:
  '/positions/{positionId}':
    x-swagger-router-controller: controller
    get:
      description: some description
      operationId: getPosition

in controllers / controller.js

module.exports.getPosition = function(request, response) {
    const positionId = request.swagger.params.positionId.value;
    try {
        someModel.getPosition(positionId)
            .then(function() {
                return response.status(200).json();
            })
            .catch(function(error) {
                return response.status(500).json();
            });
    } catch(error) {
        return response.status(500).json();
    }
};

我想写:

module.exports.getPosition = async function(request, response) {
    const positionId = request.swagger.params.positionId.value;
    try {
        await someModel.getPosition(positionId);
        return response.status(200).json();
    } catch(error) {
        return response.status(500).json();
    }
};

2 个答案:

答案 0 :(得分:0)

这是swagger-node-runner包的问题(请参阅here):

  他们需要更新代码才能使用最新代码   发布swagger-tools

我通过以下方式解决了这个问题:

首先,在项目中安装0.10.3 swagger-tools版本:

npm install --save swagger-tools@0.10.3

然后,在swagger-node-runner文件中手动更改node_modules/swagger-node-runner/package.json的依赖关系,例如:

[...]
    "dependencies": {
        "bagpipes": "^0.0.6",
        "config": "^1.16.0",
        "cors": "^2.5.3",
        "debug": "^2.1.3",
        "js-yaml": "^3.3.0",
        "lodash": "^3.6.0",
        "swagger-tools": "^0.10.3"
    },
[...]

答案 1 :(得分:-1)

对于您使用等待,您在创建函数时使用异步,它遵循:

module.exports.getPosition =  async function(request, response) {
    const positionId = request.swagger.params.positionId.value;
    try {
        await someModel.getPosition(positionId);
        return response.status(200).json();
    } catch(error) {
        return response.status(500).json();
    }
};