使用Nestjs服务公共和私有端口

埃里克·波洛玛(Erik Poromaa)

我正在建立一个旨在服务于移动应用程序的应用程序。除了为客户提供服务外,它还将具有一些后台功能。

我们正在使用swagger,我们希望能够访问后台端点的swagger文档。但是,我们不想公开公开所有端点。

假设所有端点都是公共的,那么我们正在考虑的一种解决方案是让服务器为两个端口提供服务,然后仅将一个端口公开。我们创建了一个小的示例存储库,该存储库在两个不同的端口上为一个客户端模块和一个后台模块提供服务。

main.ts如下所示:

import { NestFactory } from '@nestjs/core';
import { ClientModule } from './modules/client/client.module';
import * as express from 'express';
import * as http from 'http';
import {ExpressAdapter} from '@nestjs/platform-express';
import { BackOfficeModule } from './modules/backoffice/backoffice.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

async function bootstrap() {

  const clientServer = express();
  const clientApp = await NestFactory.create(
    ClientModule,
    new ExpressAdapter(clientServer),
  );
  const clientOptions = new DocumentBuilder()
    .setTitle('ClientServer')
    .setDescription('The client server API description')
    .setVersion('1.0')
    .addTag('client')
    .build();
  const clientDocument = SwaggerModule.createDocument(clientApp, clientOptions);
  SwaggerModule.setup('api', clientApp, clientDocument);
  await clientApp.init();

  const backOfficeServer = express();
  const backOfficeApp = await NestFactory.create(
    BackOfficeModule,
    new ExpressAdapter(backOfficeServer),
  );

  const backOfficeOptions = new DocumentBuilder()
    .setTitle('BackOffice')
    .setDescription('The back office API description')
    .setVersion('1.0')
    .addTag('backOffice')
    .build();
  const backOfficeDocument = SwaggerModule.createDocument(backOfficeApp, backOfficeOptions);
  SwaggerModule.setup('api', backOfficeApp, backOfficeDocument);
  await backOfficeApp.init();

  http.createServer(clientServer).listen(3000); // The public port (Load balancer will route traffic to this port)
  http.createServer(backOfficeServer).listen(4000); // The private port (Will be accessed through a bastian host or similar)
}
bootstrap();

另一个选择是在代码库和基础结构之间建立更大的隔离,但是由于这是一个非常早期的阶段,我们认为这是不必要的。

因此,我们向Nest社区提出的问题是,有人这样做吗?如果是这样,您的经验是什么?分离这样的后端代码有什么弊端?

让我们读

没关系,但是如果您要在一台主机上运行两台服务器,我建议创建像main-client.ts这样的两个文件main-back-office.ts并在不同的进程中运行它们,因为在这种情况下,一台服务器的故障不会影响另一台服务器的工作。

此外,如果你没有在运行此Docker我建议喜欢的工具永远PM2上司还是我自己很小的图书馆工作者集群

如果您在运行它Docker而又不想进行大的重构,那么我建议您Dockerfile通过运行differentCMDENTRYPOINTcommand创建一个

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 Softlayer API 订购公共和私有 Vlan

Python 公共和私有方法

Micrometer @Timed 注释在简单的公共和私有(服务)方法上

在 azure Web 服务身份验证问题上运行公共和私有图像

使用公共和私有重载构造函数时的c ++垃圾成员值

如何使用公共和私有映像创建docker-compose.yml文件?

在Perl 6中的类中使用公共和私有方法

如何使用用于公共和私有应用程序的REST API处理OAuth 2.0?

如何验证Java中的公共和私有密钥对

从yaml文件创建公共和私有Open API文档

Spring boot:提供公共和私有(受限)静态内容

公共和私有领域的Firestore安全规则

私有,公共和受保护的继承之间的区别

公共和私有字段的内存分配-GCC方式

Laravel 中公共和私有文件的目录

SQL 查询 - 包 x 的公共和私有对象

公共和私有对对象的内存布局有影响吗?

如何同时拥有公共和私有空构造函数?

是否有规范的方式将git repo追溯划分为公共和私有变量?

如何确定公共和私有子网以及VPC的CIDR块?

如何将公共和私有保留IP附加到GCE实例?

ejs 和 express 公共和私有路由的视图页面

C ++中的朋友声明-公共和私有之间的区别

CloudKit-公共和私有数据库-消息传递平台

Ckan API获取最近更改的数据集列表(公共和私有)

GitHub Package Registry中的公共和私有软件包

如何在JavaScript中定义公共和私有财产

在 WSO2 API Manager 中保护公共和私有 API

AWS ECS私有和公共服务