我使用 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();
}
};
答案 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();
}
};