当前位置: 首页 > 知识库问答 >
问题:

h12 nodejs的heroku服务器请求超时

蒯宇定
2023-03-14

我在heroku服务器上部署了nodejs代码。

我面临H12请求超时问题

这是与pgsql的db连接,它是异步的

const { Pool } = require("pg");
import nodeEnvFile = require("node-env-file");
import { Query } from "src/models/query";
nodeEnvFile(".env");

const config = {
    user: process.env.DB_USER,
    host: process.env.DB_IP,
    database: process.env.DB,
    password: process.env.DB_PASSWORD,
    port: process.env.DB_PORT,
    max: 5, // max number of connection can be open to database
    idleTimeoutMillis: 30000, // how long a client is allowed to remain idle before being closed
    ssl: true
};

const pool = new Pool(config);

export class DB {
    static async query(queryInfo: Query): Promise<any> {
        // to hold undefined values while stringfy json
        const replacer = (_key, value) => typeof value === "undefined" ? null : value;
        let _arguments = "()";
        if (queryInfo.arguments) {
            _arguments = `('${JSON.stringify(queryInfo.arguments, replacer)}'::json)`;
        }
        const query = `select * from ${queryInfo.name} ${_arguments} as info;`;
        console.log(query);
        try {
            return pool.query(query)
                .then((response) => {
                    console.log("response", response);
                    return response.rows[0].info;
                })
                .catch((err) => {
                    console.log("Db Error : ", err);
                    throw err;
                });
        } catch (err) {
            console.log("err", err);
            throw err;
        }
    }
}

这是我如何调用这个数据库

const _loginInfo: any = await AuthFacade.login(credentials);

以及立面功能

static async login(credentials: LoginCredentials): Promise<{ userId: number, token: string }> {
    const query = new Query({
        name: this.PROCS.LOGIN,
        arguments: credentials
    });
    return DB.query(query);
}

同样的编码在本地工作,它也在heroku工作。但是突然间我得到了这个问题。有什么帮助吗?

共有1个答案

顾泰平
2023-03-14

pgsql连接有问题。我使用的是pg的第7版,我想这对HeroKu不起作用。所以我更新了pg的版本

"pg": "^8.5.1",

并更新了池配置

const Pool = require("pg-pool");
import nodeEnvFile = require("node-env-file");
import { Query } from "src/models/query";
nodeEnvFile(".env");

const config = {
    user: process.env.DB_USER,
    host: process.env.DB_IP,
    database: process.env.DB,
    password: process.env.DB_PASSWORD,
    port: process.env.DB_PORT,
    max: 5, // max number of connection can be open to database
    idleTimeoutMillis: 30000, // how long a client is allowed to remain idle before being closed
    ssl: { rejectUnauthorized: false }
};

const pool = new Pool(config);

export class DB {
    static async query(queryInfo: Query): Promise<any> {
        // to hold undefined values while stringfy json
        const replacer = (_key, value) => typeof value === "undefined" ? null : value;
        let _arguments = "()";
        if (queryInfo.arguments) {
            _arguments = `('${JSON.stringify(queryInfo.arguments, replacer)}'::json)`;
        }
        const query = `select * from ${queryInfo.name} ${_arguments} as info;`;
        console.log(query);
        try {
            return pool.query(query)
                .then((response) => {
                    return response.rows[0].info;
                })
                .catch((err) => {
                    console.log("Db Error : ", err);
                    throw err;
                });
        } catch (err) {
            console.log("err", err);
            throw err;
        }
    }
}

现在它正在工作

 类似资料:
  • 我有一个NodeJS应用程序,它使用服务器发送事件(SSE)路由将更新从服务器发送到客户端。在我的本地开发环境中,这非常有效,因为客户端始终保持与SSE路由的连接,并且在断开连接时尝试立即重新连接。 然而,一旦我将我的应用程序部署到Heroku,一切都出了问题。在没有通过SSE路由发送任何数据的几秒钟内,我在客户端收到一个503服务不可用的错误,客户端失去了与服务器的连接,因此无法接收任何实时更新

  • 我们在Spring WebFlux中使用2.4.2中的Spring Boot。 我希望Spring Boot应用程序终止对应用程序的所有请求,这些请求需要超过3秒的处理时间。 有,但这似乎并不能解决问题。 有没有办法指定这样的服务器请求超时?

  • 我有一个Spring Boot应用程序,我想实现的是,当我的Rest控制器需要更长的时间来处理请求时,只需发送错误而不继续处理请求。这可能吗?我如何以某种方式实现它,而无需在控制器级别进行修改,而是在应用程序级别进行修改。这是在最新的Spring启动

  • 我正在寻求帮助,以解决这个基本方案无法正常工作的问题: 在运行在MacBook上的VirtualBox VM上安装了kubeadm的三个节点: Virtualbox VM有2个适配器:1)主机专用2)NAT。来自客户计算机的节点IP是: 我将它们公开为ClusterIP服务: 现在问题来了: 我ssh到kubernetes-node1并使用集群IP卷曲服务: 如果我ssh到kubernetes-n

  • 在终端上,我得到了这个错误:$./asadmin start-domain domain1 找不到默认的域目录。此系统属性没有值:com.sun.aas.domainsroot命令启动-域失败。 在Eclipse上,我得到了这个运行时异常:在Felix平台上启动GlassFish 玻璃鱼4 拜托,你知道怎么解决这个问题吗?

  • 问题内容: 我正在尝试允许javascript与Node.js服务器通信。 POST请求(Web浏览器) 现在,Node.js服务器代码如下所示。在用于GET请求之前。我不确定如何使其与POST请求一起使用。 服务器(Node.js) 在此先感谢您的帮助。 问题答案: 以下代码显示了如何从HTML表单读取值。正如@pimvdb所说,您需要使用request.on(’data’…)来捕获正文的内容。