【问题标题】:node + Swagger behind nginx proxy_passnginx proxy_pass 后面的节点 + Swagger
【发布时间】:2021-10-10 14:14:43
【问题描述】:

我正在尝试让 node 和 swagger 动态地与 nginx 一起工作

server_name ~^backend(?<PORTSERVER>[^.]+)\.domain\.com$;

location /swagger
{
proxy_pass http://127.0.0.1:$PORTSERVER/swagger/;
}

location /api
{
proxy_pass http://127.0.0.1:$PORTSERVER/api;
}

这是 PORTSERVER 变量从 gitlab-ci 获取的虚拟主机示例,它需要合并请求的 id 编号 + 2000

当我将端口直接放在 $PORTSEVER 的位置时,一切都在工作 swagger 和 api

感谢任何建议,谢谢

这是 index.js 文件

    "use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const typeorm_1 = require("typeorm");
const express = require("express");
// var router = express.Router();
const fileUpload = require("express-fileupload");
const bodyParser = require("body-parser");
const routes_1 = require("./routes");
const cors = require("cors");
const typeorm_pagination_1 = require("typeorm-pagination");
const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('../../swagger.json');
var path = require('path');
typeorm_1.createConnection()
    .then((connection) => __awaiter(void 0, void 0, void 0, function* () {
    // create express app
    const app = express();
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded());
    app.use(fileUpload());
    app.use(express.static(path.join(__dirname, '..', 'public')));
    console.log(path.join(__dirname, '..', 'public'));
    // register express routes from defined application routes
    routes_1.Routes.forEach((route) => {
        app[route.method]('/api' + route.route, (req, res, next) => {
            const result = new route.controller()[route.action](req, res, next);
            res.header('Access-Control-Allow-Origin', '*');
            if (result instanceof Promise) {
                result.then((result) => (result !== null && result !== undefined ? res.send(result) : undefined));
            }
            else if (result !== null && result !== undefined) {
                res.json(result);
            }
        });
    });
   // setup express app here
    // ...
    app.use('/swagger', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
    app.use(express.json());
    app.use(cors());
    app.use(typeorm_pagination_1.pagination); // Register the pagination middleware
    // start express server
 //   app.listen(process.env.SERVER_Port);
    app.listen(process.env.PORTSERVER);
    console.log('Express server has started on port ' + process.env.PORTSERVER);
}))
    .catch((error) => console.log(error));
//# sourceMappingURL=index.js.map

【问题讨论】:

    标签: node.js variables nginx dynamic swagger


    【解决方案1】:

    关键是他的句子是“当我将端口直接放在 $PORTSEVER 的位置时,所有东西都在工作 swagger 和 api”

    根据您给出的描述,我认为 gitlabci 错过了生成端口号,或者错过了对语法的理解。gitlabci 和 nginx 都使用 $VAR 语法。也可能是对第一行正则表达式的错误解释。 .

    另外,我认为您需要检查 js 文件中使用的 process.env.PORTSERVERa 的内容..它可以具有与 nginx 不同的端口..

    为此,我会通过阻止作业重新启动 nginx 来解决此问题,以免导致其他虚拟主机停机。然后从我运行 nginx -t 和/或 diff -u 工作的服务器部署一个损坏的配置配置和一个坏的..

    第一个事实来源是nginx -t 和 nginx 日志。如果曾经由 nginx 管理启动,那么它返回的 HTTP 代码可以揭示更多的追踪路径。

    您忘记分享的一件事是您的 gitlabci YML 的内容。这也有助于识别问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      相关资源
      最近更新 更多