我正在写一个 node .在Heroku上安装js应用程序,并使用pg module.我无法找到"正确"的方法来为查询数据库所需的每个请求获取客户机对象.

该文档使用如下代码:

pg.connect(conString, function(err, client) {
  // Use the client to do things here
});

但你肯定不需要在每个使用数据库的函数中调用pg.connect,对吗?我见过other code个这样做的:

var conString = process.env.DATABASE_URL || "tcp://postgres:1234@localhost/postgres";
var client = new pg.Client(conString);
client.connect();
// client is a global so you can use it anywhere now

我倾向于第二种 Select ,因为我认为Heroku的免费数据库实例无论如何都只限于一个连接,但是这样做有什么缺点吗?在每次使用客户端对象之前,是否需要判断它是否仍处于连接状态?

推荐答案

我是《node-postgres》的作者.首先,我很抱歉文件没有明确说明正确的 Select :这是我的错.我会努力改进的.我刚才写了a Gist来解释这一点,因为the conversation对于Twitter来说太长了.

在web环境中使用pg.connect就是the way to go.

PostgreSQL server每次只能处理一个查询.

new pg.Client是指当你知道自己在做什么的时候.当你需要的时候

一个非常有用的方法是将应用程序中对数据库的所有访问集中到一个文件中.不要乱丢pg.connect个电话或新客户.有一个像db.js这样的文件,看起来像这样:

module.exports = {
   query: function(text, values, cb) {
      pg.connect(function(err, client, done) {
        client.query(text, values, function(err, result) {
          done();
          cb(err, result);
        })
      });
   }
}

通过这种方式,您可以将实现从pg.connect个更改为定制的客户机池或其他任何东西,只需在一个地方进行更改.

看一看这node-pg-query module个.

Node.js相关问答推荐

nest js控制器方法调用两次

对接Nestjs/VueJS应用程序

@nuxtjs/站点 map 错误提示:找不到包';NitroPack';

尽管 tsconfig 中提供了正确的路径,但仍出现找不到模块错误

如何在nodejs中打印pdf

PEAN auth 应用程序:为什么 Angular 拦截器总是使用BehaviorSubject 返回 null(即初始值),而不是更新后的值?

如何获取需要加载cheerio的网站部分数据?

未捕获的错误: 只能用作 元素的子元素,永远不会直接呈现.请将您的 包裹在

当我try 从本地主机发布新产品时收到错误消息

使用 Node.js 在 MongoDB 中搜索

在 node:readline 中按 CTRL+D 时会发出什么信号?

GridFS 大文件下载使 Node.js 服务器崩溃. MongoServerError:排序超出了字节的内存限制

Sharp JS 依赖关系 destruct 了 Elastic Beanstalk 上的 Express Server

如何为一个网站实现这 2 个网址.即 www.administrator.sitename.com 和 www.sitename.com?

postman 发送请求……永远

JavaScript 异步编程:promise 与生成器

如何使用 Node.js 在服务器端管理多个 JS 文件

代理(如提琴手)可以与 Node.js 的 ClientRequest 一起使用吗

node.js 模块和函数中this的含义

在单独的模块中定义 Mongoose 模型