是否可以使用Nest.js和Node v10使用本机HTTP2?

时间:2018-05-10 13:36:34

标签: node.js express http2 nestjs

我已经读过Express 4.x与Node.js原生HTTP2(8.4+)不兼容,我希望Express 5.x上有更多的优势。 但是当我开始认为Express5.x可能会在我的下一个Node.js项目中发布时,我来到了Nest.js。

有没有人知道Nest.js是否可以与本机HTTP2支持一起使用?

我听说过唯一支持这个的Node.js框架是Fastify。 或者还有其他吗?优选支持Express插件的。

2 个答案:

答案 0 :(得分:1)

正如巴里·波拉德(Barry Pollard)所说;无论如何,在前端使用Web服务器获取静态资源和Webapp本身,以及将Node.js用于API可能是最好的方法。

答案 1 :(得分:1)

您可以使用node-spdy软件包在NestJS中使用HTTP / 2(和SPDY):

安装程序包

yarn add spdy
yarn add -D @types/spdy

生成证书

H2通常需要TLS,因此请生成新的密钥和证书:

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

修改启动

接下来,修改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();

测试客户端

$ 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"

在响应头中发送通知HTTP/2