如何使用ES6语法导入pg-promise?

8

我正在尝试使用ES6语法在Node.js服务器中设置一个Postgres数据库,但我认为我没有正确导入和初始化pg-promise。如果我使用common js语法,我会执行以下操作:

// Create Database Connection
const pgp = require('pg-promise')({});
const db = pgp(config.db);

// Test connection
db.connect()
  .then((obj) => {
    console.log('Connected to database');
    obj.done(); // success, release connection;
  })
  .catch((error) => {
    console.error('ERROR:', error.message);
  });

我正在尝试使用ES6进行以下操作,但是连接会一直停滞不前,既不会完成,也不会报错。

import pgPromise from 'pg-promise';

// Create Database Connection
const pgp = pgPromise({});
const db = pgp(config.db);

// Test connection
db.connect()
  .then((obj) => {
    console.log('Connected to database');
    obj.done(); // success, release connection;
  })
  .catch((error) => {
    console.error('ERROR:', error.message);
  });

我已经搜索了pg-promise文档,但找不到有关如何使用ES6语法的信息。你有什么建议?

3个回答

7

根据文档,我认为正确的方法是:

使用初始化选项加载和初始化库:

const initOptions = {/* initialization options */};
const pgp = require('pg-promise')(initOptions);

或者无需初始化选项:
const pgp = require('pg-promise')();

从连接中使用 pgp(connection, [dc]) 创建您的数据库对象:

const db = pgp(connection);

针对 ES6TypeScript 语法

import pgPromise from 'pg-promise';

const pgp = pgPromise({/* Initialization Options */});

const db = pgp('postgres://username:password@host:port/database');


1
在导入中使用 * 符号会导致 TypeError,指出 pgPromise 不是一个函数。 - Jack Kawell
我解决了这个问题(请查看我的回答),但事实证明pg-promise返回一个默认导出,因此您不需要使用*符号。 - Jack Kawell

3

有任何错误信息吗?Nodejs需要特定的条件来支持es模块,首先确保您已经正确引入了该模块。

// index.mjs
import pgPromise from 'pg-promise';
const pgp = pgPromise({});
console.log(pgp);

然后使用--experimental-modules参数执行

node --experimental-modules index.mjs

更多细节请查看https://blog.logrocket.com/es-modules-in-node-js-12-from-experimental-to-release/

没有抛出任何错误。我已经在Node中设置了ES模块的安装。我正在使用Node 14.3.0,并在package.json中设置了"type": "module"。 - Jack Kawell

1

好的,这很愚蠢,但我发现我的问题只是需要更新pg-promise依赖项。我使用的版本是8.5.1,升级到10.5.7可以解决这个问题。对于任何遇到这个问题的人,您可以使用问题中编写的ES6代码,只需确保您的pg-promise依赖项是最新版本即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接