【问题标题】:How to import pg-promise using ES6 syntax?如何使用 ES6 语法导入 pg-promise?
【发布时间】:2020-10-21 11:47:47
【问题描述】:

我正在尝试使用 ES6 语法在 nodejs 服务器中设置 Postgres 数据库,但我认为我没有正确导入和初始化 pg-promise。如果我使用常见的 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 语法的信息。关于我应该改变什么的任何想法?

【问题讨论】:

    标签: javascript node.js postgresql ecmascript-6 pg-promise


    【解决方案1】:

    我在文档中看到的正确。

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

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

    或者没有初始化选项:

    const pgp = require('pg-promise')();
    

    从连接创建数据库对象为 pgp(connection, [dc]):

    const db = pgp(connection);
    

    对于ES6TypeScript 语法

    import * as pgPromise from 'pg-promise';
    
    const pgp = pgPromise({/* Initialization Options */});
    
    const db = pgp('postgres://username:password@host:port/database');
    
    

    【讨论】:

    • 在导入中使用 * 符号会导致 TypeError 指出 pgPromise 不是函数。
    • 我解决了这个问题(请参阅我自己的答案),但事实证明 pg-promise 返回默认导出,因此您不需要 * 表示法。
    【解决方案2】:

    有任何错误信息吗? 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.js 中完成了 ES 模块的设置。我正在使用 Node 14.3.0 并在 package.json 中设置了“type”:“module”。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 2016-03-24
      • 2016-05-17
      • 1970-01-01
      • 2019-11-12
      • 2019-08-22
      • 2018-01-15
      • 2016-05-24
      相关资源
      最近更新 更多