NodeJS 在多次请求后无限期挂起

2024-01-08

我有一个连接到 postgres db(node-postgres 模块 v2.1.0)的 nodeJS(v.0.10.23)代理,以及返回各种 json 数据的 pgpool-II。

过去,这是处理连接错误的方式:

var after = function(callback) {
    return function(err, queryResult) {
        if(err) {
            response.writeHead(500, _header);
            console.log("ERROR: 500");
            console.log(err);
            return response.end(JSON.stringify({error: err}));
        }
        callback(queryResult)
    }
};

基本上,它的作用是在不存在错误的情况下消耗响应。

可以在这里找到深入的解释:Node js - http.request() 连接池问题 https://stackoverflow.com/questions/15533448/node-js-http-request-problems-with-connection-pooling#15537504

使用上面的函数,我得到了这样的结果:

pg.connect(_conString, after(function(err, client, done) {
  client.query(sql, after(function(result) {
  ...
  done();
} 

由于当函数传递到 after() 回调时上下文会丢失,因此我失去了使用 pg.connect() 传递的固有 did() 方法的能力。

删除后解决了问题,但是,在适当的时候并且有相当数量的客户端拉取数据时,节点将挂起,直到重置。

是否有不同的方式来消费各种异步响应?

或者也许是将 pg.connect 上下文传递到回调中的方法?


好吧,你当然输了done(),你永远不会在你的回调函数中传递第三个参数after()功能。

function after(cb) {
    return function() {
        // you're using this function in a context where the arguments
        // passed in could be anything. the only constant is that the first
        // argument is the error, if any
        if (arguments[0]) {
            response.writeHead(500, _header);
            console.log("ERROR: 500");
            console.log(err);
            return response.end(JSON.stringify({error: arguments[0]}));
        }
        // apply the entire argument list to the callback, without modification
        cb.apply(cb, arguments);
    };
}

...这也解决了传递的可疑约定client通过queryResult多变的。

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

NodeJS 在多次请求后无限期挂起 的相关文章

  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作
  • 在 Express Nodejs 中将图像文件转换为 Base64

    我正在尝试将图像文件转换为base64 这样我就可以以base64字符串形式存储在mongoDB中 这就是我尝试这样做的方式 router post file upload function req res function base64
  • React Jest 示例不起作用

    尝试运行 Jest 测试 React 代码的示例 来自https github com facebook jest tree master examples react https github com facebook jest tree
  • 无法调用 Node.js 中 ES6 定义的类中的方法 [重复]

    这个问题在这里已经有答案了 我正在使用 Node js Express js 和 MongoDB 制作一个应用程序 我正在使用 MVC 模式 并且还有单独的路由文件 我正在尝试创建一个控制器类 其中一个方法调用其中声明的另一个方法 但我似乎
  • 如何为 mocha 单元测试提供 chai Expect 自定义错误消息?

    我使用 chai 的期望进行了摩卡测试 it should parse sails out of cache file async gt const sailExtractor new Extractor const result awai
  • Angular 2 验证状态

    我使用 Angular 2 实现了一个登录页面 登录后 我从服务器获取 jsonwebtoken userId userRole userName 我将此信息存储在本地存储中 以便我可以随时访问它并在用户刷新页面时保持登录状态 AuthSe
  • 如何修复:升级 Node 版本后出现“EPROTO”错误

    以下代码适用于 Node 的v10 15 3版本 const post require request post url https cidadao sinesp gov br sinesp cidadao mobile consultar
  • 获取两行之间不同的列

    我有一张桌子company有 60 列 目标是创建一个工具来查找 比较和消除该表中的重复项 示例 我发现 2 家公司可能相同 但我需要知道这两行之间哪些值 列 不同才能继续 我认为可以逐列比较 x 60 但我寻找更简单 更通用的解决方案 就
  • 使用 swagger-ui-express 和 swagger-jsdoc 时如何在 swagger 文件中正确使用 $ref

    我开始使用 swagger 与swagger ui express and swagger jsdoc自动记录我现有的 API 它是用nodejs并表达 就像这里描述的那样 example http www acuriousanimal c
  • 删除连接中不存在的记录

    想象两个表 A 和 B A B 1 2 2 3 6 5 4 7 9 11 13 23 9 现在我想从 A 中删除 B 中不存在的记录 例如从 A 中删除 1 6 和 4 我最初的想法是您可以 否定 联接的结果 DELETE FROM A W
  • 为什么 PostgreSQL 会重新分配角色命令,更改模板数据库的所有者

    想象一下现有的数据库称为store a与一表产品 还有一个用户叫store a user 数据库 表 数据 对象等都属于store a user 我现在创建一个名为的新用户store b user和一个名为的新数据库store b通过模板化
  • 使用基于浏览器的 JavaScript 和 Node 操作本地文件系统

    我正在制作一个项目 需要允许用户从浏览器与文件系统进行交互 我在编写客户端 JavaScript 方面拥有丰富的经验 并且在为网页抓取 数据分析和文件系统工作等编写 Node 脚本方面也拥有丰富的经验 但这个项目将允许用户在浏览器中更改内容
  • 如何更新 Node.js?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我执行了以下操作来更新我的 npm npm update npm g 但我不知道如何更新
  • 如何取消异步下载?

    我有一个问题 如何取消下载 client CancelAsync 对我来说不起作用 因为如果我取消下载并开始新的下载 代码仍会尝试访问旧的下载文件 您必须知道 在我的代码中 有一个部分 当下载完成时 它应该解压缩已下载的文件 像这样的示例
  • Docker 容器在运行或重新启动 PostgreSQL 镜像后立即退出

    我是 docker 的初学者 由于容器重新启动问题 我陷入困境 当我尝试重新启动现有退出的容器或创建新容器 删除旧容器后 运行时 会出现问题 docker run d name mempostgres v home lukasz lc pg
  • node_redis CONFIG SET 命令

    我目前正在使用 redis 编写一个应用程序 但我遇到了 node redis 库的问题 特别是我无法弄清楚如何从 node redis 中使用 redis 命令 我已经尝试了以下所有 client send command CONFIG
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • MySQL - 连接 a 或 b

    假设我有一个TABLE a其中一个COLUMN data是一个join其他 2 张桌子 TABLE b and TABLE c 因为我想得到一个COLUMN info in b or c 事情是a data将匹配only with b da
  • 使用 ActiveRecord 和 Yii2 记录实际的 SQL 查询?

    我正在这样做 students Student find gt all return this gt render process array students gt students 然后在视图中 foreach students as

随机推荐