6

我读过 Express 4.x 与 Node.js 原生 HTTP2(从 8.4+ 起)不兼容,我希望 Express 5.x 能取得比它更多的进步。但是当我开始认为 Express5.x 可能会为我的下一个 Node.js 项目发布到很晚时​​ - 我来到了 Nest.js。

有谁知道 Nest.js 是否可以与原生 HTTP2 支持一起使用?

我听说的唯一支持此功能的 Node.js 框架是 Fastify。或者还有其他的吗?支持 Express 插件的首选。

4

2 回答 2

8

You can use HTTP/2 (and SPDY) in NestJS using the node-spdy package:

Setup packages

yarn add spdy
yarn add -D @types/spdy

Generate certificate

H2 generally requires TLS, so generate a new key and certificate:

openssl req -x509 -newkey rsa:2048 -nodes -sha256 -keyout test.key -out test.crt

Modify startup

Next, modify main.ts:

// main.ts
async function bootstrap() {

  const expressApp: Express = express();

  const spdyOpts: ServerOptions = {
    key: fs.readFileSync('./test.key'),
    cert: fs.readFileSync('./test.crt'),
  };

  const server: Server = spdy.createServer(spdyOpts, expressApp);

  const app: NestApplication = await NestFactory.create(
    AppModule,
    new ExpressAdapter(expressApp),
  );
  
  await app.init();
  await server.listen(3000);
}

bootstrap();

Test client

$ curl -I -k https://localhost:3000/
HTTP/2 200 
x-powered-by: Express
content-type: text/html; charset=utf-8
content-length: 12
etag: W/"c-Lve95gjOVATpfV8EL5X4nxwjKHE"

Notice HTTP/2 being sent in the response headers.

于 2020-11-21T00:07:46.270 回答
0

正如巴里波拉德评论的那样;在前端使用网络服务器来获取静态资源和 Webapp 本身,并将 Node.js 用于 API 目的,无论如何可能是最好的方法。

于 2018-08-31T10:17:47.940 回答