如何从 hapi.js 路由处理程序外部进行回复

2023-12-03

我有一个hapi.js我想推迟响应的路线。我尝试过存储reply函数并稍后调用它,或者将其包装在 Promise 中,但 hapi 总是立即响应 500 内部服务器错误响应。

存储回复以供稍后使用:

var pendingReplies = {};
server.route({
    method: "POST",
    path: "/",
    handler: function (request, reply) {
        var id = generateId();
        pendingReplies[id] = reply;
    }
});
... // reply later by calling:
function sendResponse(id, data) {
    pendingReplies[id](data);
}

我尝试创建一个回复承诺:

handler: function (request, reply) {
    var id = generateId();
    return new Promise(function (resolve, reject) {
        pendingReplies[id] = resolve;
    }).then(function (data) {
        return reply(data);
    });
}

我尝试过使用reply().hold()

handler: function (request, reply) {
    var id = generateId();
    var response = reply().hold();
    pendingReplies[id] = function (data) {
        response.source = data;
        response.send();
    };
    return response;
}

我尝试过使用reply().hold()并承诺:

handler: function (request, reply) {
    var id = generateId();
    var response = reply().hold();
    return new Promise(function (resolve, reject) {
        pendingReplies[id] = resolve;
    }).then(function (data) {
        response.source = data;
        response.send();
        return response;
    });
}

对于每一个,一旦处理程序函数退出,我就会在节点控制台中收到 500 响应和以下输出:



Debug: internal, implementation, error
    Error: Uncaught error: socket hang up
    at createHangUpError (_http_client.js:198:15)
    at Socket.socketOnEnd (_http_client.js:283:23)
    at emitNone (events.js:72:20)
    at Socket.emit (events.js:163:7)
    at _stream_readable.js:891:16
    at process._tickDomainCallback (node.js:388:13)
  

hapi 是否可以从路由处理程序外部异步回复请求?


如果您的处理程序中抛出错误,hapi.js将立即退出并给出500状态码。检查是否generateId()是一个有效的函数。

您的代码的其余部分看起来适合您的第三个和第四个示例。reply().hold()之后有必要保持连接打开handler返回。

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

如何从 hapi.js 路由处理程序外部进行回复 的相关文章

随机推荐

  • 将sourcesJar任务添加到自定义Gradle插件

    我的公司最近为普通配置 存储库 跨项目的常见依赖项等 编写了 gradle 插件 总的来说 这极大地简化了我们的构建过程 并发现了项目之间的一些不一致之处 我们最近尝试添加一个sourcesJar任务到插件 但它不起作用 这是损坏的插件 p
  • 同一内存地址有两个不同的值

    Code include
  • ts:“Props”可以用任意类型实例化,该类型可能与其他类型无关

    const withFirebase
  • 如何在AWS lex中从意图A调用意图B? [复制]

    这个问题在这里已经有答案了 我正在使用 aws lex 我有一个意图 A 我给它起了个名字welcomeMsg 我想打电话给另一个人intent B from intent A 欢迎msg intent A 它会说 gt Hi I am a
  • python 库中的“randrange() 的非整数参数 1”

    我使用随机数生成器生成 5 到 10 之间的随机数 能不能这么难 我之前在代码中使用过它 2000 行代码 对于这里来说太多了 并且没有发生编码错误 我的代码对于我的游戏来说只是复活节彩蛋 但它破坏了我的所有代码 def slowp t f
  • AngularJS 和 Express Routing 问题

    我正在使用 AngularJS 和 ExpressJS 并且遇到路由问题 我看到了很多其他帖子 但这些解决方案似乎都不起作用 这是我在 Express 中的路线 module exports function app auth Api ro
  • R 如何在不知道长度的情况下创建 for 循环?

    目前在这方面site我正在抓取镜头图表信息 为了抓取信息 我需要为有多少个镜头创建一个 for 循环 我通过单击 球队统计数据 并查找投篮尝试次数来查找投篮次数 我想做适当的for loop无需找出镜头的数量 我目前正在做的事情 shotc
  • 更新第一行mysql php

    我正在尝试更新数据库中的第一行 我用Limit 1仅更新第一行但什么也没有发生 肯定有匹配的行 但数据库中没有任何变化 这是代码 foreach player fromsite as match player in game querytw
  • loadNibNamed 方法太慢 - 如何使其更快?

    我有一个滚动视图 其中包含大约 40 50 个不同类型的对象 对象的类型是根据对象位置的函数定义的 例如 如果是滚动视图中的第 5 个对象 gt 是 Object1 如果是滚动视图中的第 11 个对象 gt 则是 Object2 类型等 使
  • Python Popen 无法在 Windows PowerShell 中使用正确的编码

    我正在 Windows PowerShell 中运行 Python 脚本 该脚本应使用 Popen 运行另一个程序 然后通过管道传输该程序 实际上是 Mercurial 的输出以在我的脚本中使用 当我尝试在 PowerShell 中执行脚本
  • 在 Java 中逐行读取大型 JSON 文件的快速高效方法

    我有 1 亿条记录JSON文件 需要一种高效且最快的方法来读取数组的数组JSON文件输入java JSON文件看起来像 XYZ ABC XYZ ABC XYZ ABC XYZ ABC XYZ ABC XYZ ABC XYZ ABC XYZ
  • 有使用 pywin32 createprocessasuser 并获取输出的好例子吗?

    我需要使用 pywin32 方法以不同的用户身份创建进程 然后从生成的进程中获取标准输出 标准错误和错误代码 并在进程运行时将输入输入到进程中 问题是 我似乎找不到 createprocess 函数的一个很好的例子 这个问题变得更加复杂 因
  • 如何在seaborn中检索错误栏

    我使用以下函数在seaborn中绘制了条形图 ax sns barplot x Year y Value data df 现在我想根据以下规则为每个条形着色 percentages for bar yerr in zip bars yerr
  • 使用 Kryo 序列化任意 Java 对象(出现 IllegalAccessError)

    动机 为了帮助远程调试 Java 能够请求远程服务器将任意对象发送到我的本地计算机进行检查非常有用 然而 这意味着远程服务器必须能够序列化运行时事先未知的任意java对象 于是我四处打听 偶然发现Kryo序列化库 From Kryo 的文档
  • 在固定 div 内旋转文本

    我正在尝试在页面左侧设置一个固定 div 距离左侧 24px 并从页面顶部延伸到底部 该 div 内将包含导航和标题 我试图将标题旋转 90 度并居中定位到 div 的底部 很难弄清楚这一点 查了很多地方都没有看到类似的例子 我已经用当前的
  • 将 HTML 字符串转换为 DOM 元素?

    有没有办法将 HTML 转换为 div a href a span span div 或者任何其他 HTML 字符串到 DOM 元素中 这样我就可以使用appendChild 我知道我可以执行 innerHTML 和 innerText 但
  • write_csv read_csv 在第 1000 行后使用科学记数法

    使用 write csv 将混合有小整数条目 值小于 1000 和 大 整数条目 值 1000 或以上 的数据框写入 csv 文件 会混合科学和非科学条目 如果前 1000 行是小值 但此后有一个大值 则 read csv 似乎会与这种混合
  • Cassandra-Windows 10

    我已经安装了 apache cassandra 3 11 11 和 DATASTAX DDC 但它们无法在 Windows 10 上运行 它在 cmd 中给出错误 如图所示 我尝试在 powershell 上编写 cassandra bat
  • ASP.NET MVC3如何使用间隔一小时的计时器执行控制器的操作方法

    Hello 我正在使用 asp net mvc3 我有一个特殊的控制器 它有一种特殊的操作方法 我需要使用计时器以一小时为间隔执行此操作方法 任何最好 最有效的想法 thanks 我能够使用 VBScript 和 Windows Sched
  • 如何从 hapi.js 路由处理程序外部进行回复

    我有一个hapi js我想推迟响应的路线 我尝试过存储reply函数并稍后调用它 或者将其包装在 Promise 中 但 hapi 总是立即响应 500 内部服务器错误响应 存储回复以供稍后使用 var pendingReplies ser