在部署时获取空路径键是招摇。本地工作正常

时间:2017-09-11 14:33:54

标签: javascript node.js swagger swagger-ui

我正在使用swagger-jsdoc。一切似乎很好,我正在使用json,直到我使用localhost,当我使用实时网址时,它在路径键中没有给我任何东西,即。

{
    "info": {
        "title": "App API",
        "version":"0.0.0",
        "description":"Server API documentation"
    },
    "host":"something.com",
    "basePath":"/",
    "schemes":["https"],
    "swagger":"2.0",
    "paths":{},
    "definitions":{},
    "responses":{},
    "parameters":{},
    "securityDefinitions":{},
    "tags":[]
}

这就是我现场直播的内容。相同的代码适用于localhost/swagger.json,但不适用于https://something.com/swagger.json

var swaggerJSDoc = require('swagger-jsdoc');

var swaggerOptions = {
    swaggerDefinition: config.swaggerDefinition || {
        info: { // API informations (required)
            title: 'Hello World', // Title (required)
            version: '1.0.0', // Version (required)
            description: 'A sample API', // Description (optional)
        },
        host: 'localhost:3000', // Host (optional)
        basePath: '/', // Base path (optional)
    },
    apis: ['./routes/*.js'], // Path to the API docs
};

var swaggerSpec = swaggerJSDoc(swaggerOptions);

router.get('/swagger.json', function(req, res) {
  res.setHeader('Content-Type', 'application/json');
  res.send(swaggerSpec);
});

3 个答案:

答案 0 :(得分:1)

config.swaggerDefinition中的主机选项可能存在问题。它是否设置为正确的域名?

答案 1 :(得分:1)

这个问题是由路由的路径引起的。

我使用的是 apis: [ './routes/*.js' ]

但是我的服务器有路径 ./bin/www,所以在这些情况下 ./routes 根本不起作用,实现它的最佳方法是改用 __dirname。 例如。

apis: [`${__dirname}/routes/*.js`]

我在同一天解决了它,但忘记在此处添加答案。

答案 2 :(得分:0)

我之前也遇到过同样的问题。如果您使用的是pm2,则可能与我的问题相同。

就我而言,当我使用

更改了paths中的apis时,该问题已解决
apis: [ './routes/*.js' ]

进入

apis: [ __dirname + 'routes/*.js' ]

因此使用__dirname代替.

希望这会有所帮助!