我正在使用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, err => {
if (err) throw err;
})
我正在尝试将快递服务器作为createSecureServer()的第二个参数传递,但是我不确定是否正确,因为出现此错误:
[nodemon] 2.0.2 [nodemon]要随时重新启动,请输入
rs
[nodemon] 观看目录:。 [nodemon]观看扩展:js,mjs,json [nodemon]开始node index.js
_http_incoming.js:96,如果(this.socket。可读) ^TypeError:无法读取未定义的属性“可读” 在IncomingMessage._read(_http_incoming.js:96:19) 在IncomingMessage.Readable.read(_stream_visible.js:491:10) 在resume_(_stream_read.js:976:12) 在processTicksAndRejections(internal / process / task_queues.js:80:21)[nodemon]应用崩溃- 等待文件更改,然后再开始...
应该注意,我的证书虽然是自签名的并且不可靠,但是可以正确加载。 如果可以使用NodeJS,我尽量不要使用第三方模块。有帮助吗?
答案 0 :(得分:10)
expressjs
仍不正式支持节点http2
但是您可以使用node-spdy
。使用此模块,您可以在具有自然http模块界面并回退到常规https(对于尚不支持HTTP2或SPDY的浏览器)的node.js中创建HTTP2 / SPDY服务器。
const port = 3000
const spdy = require('spdy')
const express = require('express')
const path = require('path')
const fs = require('fs')
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
,visit here的更多数据。
如果您可以选择其他框架,则可以使用支持节点http2
的'KOA'或'HAPI'。 This might be useful for you