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

2024-01-18

我正在使用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')
})

我试图将 Express 服务器作为 createSecureServer() 的第二个参数传递,但我不确定我是否正确,因为我收到此错误:

[nodemon]2.0.2 [nodemon]随时重启,输入rs[节点守护进程] 观看目录:.[nodemon] 观看扩展:js,mjs,json [nodemon] 启动node index.js_http_incoming.js:96 if (this.socket.read) ^

类型错误:无法读取未定义的“可读”属性在 IncomingMessage._read (_http_incoming.js:96:19) 在 IncomingMessage.Readable.read (流_可读.js:491:10) 在简历中(_stream_read.js:976:12) 在 processTicksAndRejections (internal/process/task_queues.js:80:21) [nodemon] 应用程序崩溃 - 开始之前等待文件更改...

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


expressjs仍然没有正式支持 Nodehttp2.

欲了解更多详情,请访问此处 https://expressjs.github.io/statusboard/

但你可以使用node-spdy。使用此模块,您可以在node.js中使用自然的http模块接口创建HTTP2 / 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, 访问这里 https://github.com/spdy-http2/node-spdy.

如果您可以选择其他框架,则可以使用'KOA' or 'HAPI'支持节点http2. 这可能对你有用 https://ivanjov.com/running-express-koa-and-hapi-on-http-2/

另外,请阅读此内容发布 5.0#2237 https://github.com/expressjs/express/pull/2237。它说:

Express 5 的目标是 API 调整和删除所有代码 从 Express 存储库,移至pillarjs 中的组件 项目 (https://github.com/pillarjs https://github.com/pillarjs),至少提供基本的 支持承诺返回处理程序和完整的 HTTP/2 功能。 Express 5 将成为“pillarjs 的视图” 是这些组件的排列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用nodejs模块http2将http2与ExpressJS集成? 的相关文章

  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 无法使用 webpack 加载 Node 原生插件

    虽然我正在使用vue cli在生成 webpack 配置的示例代码中 没有任何特定于 vue 的内容 我像这样创建示例应用程序 vue init webpack webpack modules example 生成webpack base
  • at=错误代码=H12 desc=node.js中的请求超时。如何处理?

    2020 07 21T06 54 58 030920 00 00 heroku 路由器 at error code H12 gt desc Request timeout 方法 获取路径 食谱 主机 desolate beach 26163
  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • 限制 Axios 请求

    我正在使用 axios 向 Deezer API 发出请求 不幸的是 使用 Deezer 的 API 当您请求艺术家的专辑时 它不包括专辑曲目 因此 我正在通过请求艺术家的专辑 然后对每个专辑执行后续的 axios 请求来解决这个问题 我遇
  • Nodemailer发送日历事件并将其添加到谷歌日历

    我正在尝试使用 nodemailer 将日历事件发送到 Gmail 帐户 这是我的代码 let transporter nodemailer createTransport host smtp gmail com port 587 secu
  • 电子应用程序可以播放本地支持的任何视频吗?

    我知道浏览器通常会限制玩家mp4 and webm类型的媒体 但我想知道基于电子的应用程序是否可以运行 MKV 和 AVI 等格式的本地视频 我找不到明确的来源来告诉我什么是可用的 什么是不可用的 Electron 仍然仅限于网络技术 这意
  • Socket.io 400(错误请求)

    我的服务器上有这段代码 var express require express var routes require routes var user require routes user var http require http var
  • 简单 AJAX Get 请求“待处理”

    我正在尝试实现一个简单的 AJAX GET 请求 该请求告诉服务器删除数据库中的文档 虽然我从服务器得到文档已删除的确认 但 Chrome 检查器显示该请求处于 待处理 状态 最终导致服务器错误 我做错了什么 HTML div class
  • dyld:惰性符号绑定失败

    当我尝试运行时遇到一个奇怪的错误gatsby develop在新创建的 gatsby 项目中 这不应该与 gatsby js 静态站点生成器 有任何关系 因为我在不同的场合也遇到了相同的错误 当我跑步时gatsby develop在我的一个
  • 警告:访问循环依赖内模块导出的不存在属性“MongoError”

    我正在使用节点执行 API 并使用 Mongoose 当我给一个yarn dev启动我的 Nodemon Mongo 出现错误 我不知道如何解决这个问题 有人有什么想法吗 我使用的是 MongoDB Atlas 数据库 就在出现以下错误之后
  • 如何将对象数组传递给jade模板?

    我想将一组对象从 mongodb 传递到客户端 这是物体 var objeto img name name of the file image image jpg url title title of the image caption d
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • GraphQL 预期可迭代,但未找到字段 xxx.yyy 的迭代

    我目前正在尝试使用 NodeJS 进行 GraphQL 但我不知道为什么以下查询会出现此错误 library name user name email 我不确定是否type of my resolveLibrary是对的 因为在任何例子中我
  • npm install -g expo-cli 失败并显示“EPERM:不允许操作,取消链接 '...\adb.exe'

    我在运行时收到错误 npm install g expo cli 我尝试以管理员身份重新安装节点模块 但出现相同的错误 环境 Windows 10 节点版本 10 15 3 NPM版本 6 9 0 我预计安装会发生 但出现了这样的错误 np
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • 从节点服务器访问 Google Calendar API

    由于某种原因 我很难访问 Google 日历 我希望能够在 Node js 服务器的日历中添加和删除事件 我从文件中发现了非常矛盾的信息 我跟着 https developers google com identity protocols
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud

随机推荐

  • 当有多个快捷方式(NSUserActivity)时,siri 快捷按钮(INUIAddVoiceShortcutButton)显示错误的标题

    我的应用程序中有 2 个 Siri 快捷方式 我使用 NSUserActivity 来捐赠这些快捷方式 我还在我的 info plist 中创建了 2 个 NSUserActivityType 有 2 个视图控制器处理这些快捷方式 1 个视
  • IText 像 pdftotext -layout 一样读取 PDF?

    我正在寻找实现 java 解决方案的最简单方法 该解决方案与以下输出类似 pdftotext layout FILE 在 Linux 机器上 当然价格也应该便宜 我刚刚尝试了 IText PDFBox 和 PDFTextStream 的一些
  • 如何将图像或图标附加到谷歌折线图的边缘

    我想要折线图如下所示 或者只是图像序列图是可能的 like this 有什么可能的方法来实现这一目标吗 use the getChartLayoutInterface method https developers google com c
  • 将 Vcl::Controls::TCaption 又名 (System::UnicodeString) 转换为 const char *

    我目前正在使用 C Builder 创建一个将文本复制到用户剪贴板的应用程序 我已经放置了一个TMemo控制 我想将其包含在const char 变量如下面的代码所示 const char output TMemo1 gt Text 当我编
  • AWS创建POST策略base64编码+签名

    我正在尝试生成一个带有 PHP 签名的 AWS POST 策略 该策略将发送到客户端以允许通过 javascript AJAX 在浏览器中上传 我已将示例复制到http docs aws amazon com AmazonS3 latest
  • 我如何开始函数式编程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 随着函数式编程的大肆宣传 对于 C 程序员 函数式编程入门的最佳资源是什么 我并不是在寻找 C 3 0
  • UITableView:通过拖放将单元格移动到另一个位置

    我有一张包含 3 个部分的表格 第一部分 第二部分和第三部分 我想实现一种机制来通过拖放来更改单元格的位置 在同一部分内或从一个部分到另一个部分 示例1 在第一部分中 我有两行 sec1 row1 和 sec1 row2 在第二节中 我通过
  • 错误:toString 失败 Node.js 缓冲区

    有时我对 api 的 get 请求失败并显示此错误消息 顺便说一句 我使用请求模块来触发我的请求 Error toString failed buffer js 378 throw new Error toString failed Err
  • 使用 ES 模块运行 pm2

    我如何将pm2与基于ES模块 类型 模块 的包结合使用 我研究了类似的问题 没有任何有用的帮助 有人说它在 Windows 上不起作用 但我正在使用 Linux 我总是收到错误 Error ERR REQUIRE ESM require o
  • 在 python 中检索 .ttf 字体文件中所有字形的边界框和贝塞尔曲线数据

    我有兴趣提取给定 ttf 文件中所有字形的二次贝塞尔曲线信息 目前 使用 python 中的 ttfquery 库 我能够提取给定字形的轮廓 例如a 按以下方式 from ttfquery import describe from ttfq
  • 如何检查Android GPS是否被禁用[重复]

    这个问题在这里已经有答案了 我有两个文件 MainActivity java 和 HomeFragment java MainActivity 中调用 HomeFragment 中的一个函数 要求用户打开手机上的位置服务 问题是 即使用户已
  • 运行时 AOP 与编译时 AOP

    这两种AOP框架的优缺点是什么 我使用Unity作为我的aop框架 但我猜像postsharp这样的编译时aop框架可能比运行时aop框架有更好的性能 看起来运行时aop框架使用反射来实现注入 我不是 NET 人员 但我了解 Java 生态
  • Yarn add 引发错误 缺少要添加到项目中的包列表

    重新安装 Kubuntu 18 后 我尝试运行我的 vue cli 4 0 5 vuex 3 应用程序 并收到错误 错误缺少要添加到项目中的包列表 serge AtHome mnt work sdb8 wwwroot lar VApps v
  • 在 Xcode 7.2 中使用 PDF 作为图标图像

    我正在尝试在我正在开发的应用程序中使用 PDF 文件作为图标 我遇到的问题是色调颜色不一致 如果我从界面生成器设置按钮图像 则会显示图标图像black在运行时 每次 无论我尝试从界面生成器中设置什么 我尝试通过代码设置按钮图标图像而不是显示
  • Jenkins - 负载统计图奇怪的编码

    我在最新的 Jenkins 上有这个 但图例显示的是奇怪的字符而不是英语 有人知道这可能是什么吗 编码 即使使用其他显示图表的插件也是如此 我在 CentOS Linux 版本 7 4 1708 核心 Jenkins 2 73 1 apac
  • 在球拍中使用 stop-when

    我一直在搞这个程序 它需要一个数字并加 1 我想知道你到底如何使用stop when这里 例如 让它停在 5 点 我想这里需要一个 cond 声明 谢谢 require 2htdp image require 2htdp universe
  • Pandas:添加缺失月份的数据

    我有一个按月划分的客户销售信息数据框 看起来像这样 有多个客户和不同的月份和支出 customer id month year sales 0 12 2012 05 2 58 1 12 2011 07 33 14 2 12 2011 11
  • C#:将基类转换为子类

    我有一个类 NetworkClient 作为基类 using System IO using System Net Sockets using System Threading Tasks namespace Network using S
  • JavaScript,正则表达式,向字符串中包含的所有数字添加前导零

    这个 Perl 脚本是我想在 JavaScript 中实现的 source https stackoverflow com a 2659232 1076407 s 0 9 sprintf 04d 1 ge 明显地sprintf在 JavaS
  • 如何使用nodejs模块http2将http2与ExpressJS集成?

    我正在使用nodejs和express创建一个api 我想将http2与ExpressJS集成 这是我的代码 use strict const http2 require http2 const fs require fs const pa