我正在使用nodejs和express创建api,并希望将http2与ExpressJS集成起来。
这是我的密码:
'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在任何时候重新启动,输入
rsnodemon查看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,我尽量不使用第三方模块。有什么帮助吗?
发布于 2020-01-02 19:54:39
expressjs仍然没有正式支持Node http2。

但是你可以使用node-spdy。使用此模块,您可以在HTTP2 / SPDY中创建具有自然http模块接口的node.js / SPDY服务器,并返回到常规的https (对于既不支持HTTP2也不支持SPDY的浏览器):
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号表示将成为“对支柱的看法”,并将成为这些组成部分的一种安排。
https://stackoverflow.com/questions/59534717
复制相似问题