首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用nodejs模块http2与ExpressJS集成http2?

如何使用nodejs模块http2与ExpressJS集成http2?
EN

Stack Overflow用户
提问于 2019-12-30 17:36:08
回答 1查看 18.6K关注 0票数 23

我正在使用nodejs和express创建api,并希望将http2与ExpressJS集成起来。

这是我的密码:

代码语言:javascript
复制
'use strict';

const http2 = require('http2');
const fs = require('fs');
const path = require('path');

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const port = process.env.PORT || 443;

// Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// Routes variables
const indexRouter = require('./routes/index');

// Routes uses
app.use('/', indexRouter);

// Server configurations
const key = path.join(__dirname + '/security/key.pem');
const cert = path.join(__dirname + '/security/certificate.pem');

const options = {
    key: fs.readFileSync(key),
    cert: fs.readFileSync(cert)
}

const server = http2.createSecureServer(options, app);

server.on('error', err => console.log(err));

server.listen(port, () => {
   console.log('Server running')
})

我试图将表达式服务器作为createSecureServer()的第二个参数传递,但我不确定是否正确,因为我得到了以下错误:

Nodemon2.0.2在任何时候重新启动,输入rs nodemon查看dir(s):。无恶魔监视扩展: js,mjs,json nodemon启动node index.js _http_incoming.js:96 if (this.socket.readable) ^ TypeError:无法读取未定义的 at IncomingMessage._read (_http_incoming.js:96:19) at IncomingMessage.Readable.read (stream_readable.js:491:10)在processTicksAndRejections (stream_readable.js:491:10/process/task_Quees.js:80:21)的属性“可读性”--在启动之前等待文件更改.

应该注意的是,我的证书,虽然是自签名和不可靠的,但正在正确加载.如果我可以使用NodeJS,我尽量不使用第三方模块。有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-02 19:54:39

expressjs仍然没有正式支持Node http2

欲知更多详情,请访问这里

但是你可以使用node-spdy。使用此模块,您可以在HTTP2 / SPDY中创建具有自然http模块接口的node.js / SPDY服务器,并返回到常规的https (对于既不支持HTTP2也不支持SPDY的浏览器):

代码语言:javascript
复制
const spdy = require('spdy')
const express = require('express')
const path = require('path')
const fs = require('fs')

const port = 3000
const app = express()

app.get('*', (req, res) => {
  res
    .status(200)
    .json({message: 'ok'})
})
const options = {
  key: fs.readFileSync(__dirname + '/server.key'),
  cert:  fs.readFileSync(__dirname + '/server.crt')
}
console.log(options)
spdy
  .createServer(options, app)
  .listen(port, (error) => {
    if (error) {
      console.error(error)
      return process.exit(1)
    } else {
      console.log('Listening on port: ' + port + '.')
    }
  })

有关spdy到这里来的更多数据。

如果您有其他框架的选项,您可以使用'KOA''HAPI',后者支持节点http2这可能对你有用

另外,请阅读这个释放5.0#2237。它说:

Express 5的目标是对API进行调整&从Express存储库中删除所有代码,转移到支柱is项目(https://github.com/pillarjs)中的组件中,至少为承诺返回的处理程序和完整的HTTP/2功能提供基本支持。第5号表示将成为“对支柱的看法”,并将成为这些组成部分的一种安排。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59534717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档