0

我正在尝试在使用 @nestjs/platform-fastify 集成运行的 NestJS 应用程序上同时运行两台服务器(特别是我正在尝试运行同一应用程序的一个 HTTP 和一个 HTTPS 服务器)。

NestJS 文档包括用于快速集成的多个服务器,但没有提到如何使用 fastify 来做到这一点(https://docs.nestjs.com/faq/multiple-servers)。有谁知道能够做到这一点的正确实现?

4

1 回答 1

2

编辑 2019 年 11 月 20 日

所以看来我原来的答案是不正确的。在大多数情况下,我只是离开文档并试图拼凑一些东西,忘记了 Fastify 的服务器实例与 Express 的不同,因此与内置的 http(s) 模块不兼容。如果您不介意让 NestJS 再次设置您的依赖项,您可以随时执行以下操作:

import { NestFactory } from '@nestjs/core';
import { FastifyAdapter } from '@nestjs/platform-fastify';
import { AppModule } from './app.module';
import { readFileSync } from 'fs';
import { join } from 'path';
import fastify = require('fastify');

const httpsOptions = {
  key: readFileSync(join(__dirname, '..', 'secrets', 'ssl.key')),
  cert: readFileSync(join(__dirname, '..', 'secrets', 'ssl.crt')),
};

async function bootstrap() {
  const fastifyHttps = fastify({https: httpsOptions});
  const httpApp = await NestFactory.create(AppModule , new FastifyAdapter() );
  const httpsApp = await NestFactory.create(AppModule, new FastifyAdapter(fastifyHttps));
  await httpApp.listen(3000);
  console.log('http running on port 3000');
  await httpsApp.listen(3333);
  console.log('https running on port 3333');
}
bootstrap();

这一次,我对其进行了测试以确保它有效。


这仅适用于 Express

Nest 提供了在创建应用程序后获取服务器实例的方法,app.getHttpServer()以便您server无论如何都可以获得您的验证。因此,您可以像通常使用您的 fastify 适配器一样设置您的应用程序,并且在运行之后await app.init()您可以获得服务器实例。从那里您可以创建服务器并使用内置包设置侦听端口,httphttps文档中使用 express 显示的那样。

const httpsOptions = {
  key: fs.readFileSync('./secrets/private-key.pem'),
  cert: fs.readFileSync('./secrets/public-certificate.pem'),
};

const app = await NestFactory.create(
  ApplicationModule
);
await app.init();

const server = app.getHttpServer();

http.createServer(server).listen(3000);
https.createServer(httpsOptions, server).listen(443);

这应该可以解决问题

于 2019-11-19T19:40:51.033 回答