节点 - 使用node-postgres设置Postgres驱动程序

时间:2017-10-09 12:10:01

标签: node.js postgresql node-postgres

我正在尝试集成node-postgres驱动程序并学习如何进行简单的CRUD操作。在我的app.js中,我做了类似的事情:

...
var postgres = require('./adapters/postgres')
var postClient = new postgres(conf);
...
postClient.connect(function (dbconn) {
    app.dbconn = dbconn;
    app.conf = conf;

    console.log("************************************************************");
    console.log(new Date() + ' | CRUD Server Listening on ' + conf['web']['port']);
    console.log("************************************************************");

    server.listen(conf['web']['port']);

    var Routes = require('./routes/http-routes');
    new Routes(app);
});

在我的adapters/postgres.js文件中,我有以下内容:

const Client = require('pg');
const postClient = new Client(conf)({
    host: conf['postgres'].host,
    port: conf['postgres'].port,
    dbname: conf['postgres'].dbname,
    username: conf['postgres'].username,
    password: conf['postgres'].password,
    dbconn: null,
});
module.exports = postClient;
postClient.prototype.connect = function (cbk) {
    var self = this;
    client.connect(function (err, db) {
        console.log(new Date() + " | Postgres Server Connection Establised...");
        console.log(new Date() + " | Current database: ", db.databaseName);
        if (!err) {
            console.log(new Date() + " | Postgres Server Authenticated...");
            self.dbconn = db;
            cbk(db);
        } else {
            console.log(new Date() + " | Postgres Server Error in connection...");
            console.log(err);
            self.dbconn = db;
            cbk(db);
        }
    });
};

使用上面的代码,我不断收到此错误:ReferenceError: conf is not defined所以我将其添加为var conf = require('../config/conf');。这不是一个合适的解决方案,因为我想从app.js传递它。接下来,即使添加了这个,我也会收到以下错误:TypeError: Client is not a constructor。有人可以指导修复这两个错误吗?

1 个答案:

答案 0 :(得分:2)

导出一个工厂函数,该函数接受配置对象并返回客户端的实例。 <{1}}不是Client中的默认导出,因此需要对其进行解构。

pg

const { Client } = require('pg'); const createPgClient = (conf) => { const pgClient = new Client(conf)({ host: conf['postgres'].host, port: conf['postgres'].port, dbname: conf['postgres'].dbname, username: conf['postgres'].username, password: conf['postgres'].password, dbconn: null, }); pgClient.prototype.connect = function (callback) { client.connect() .then(() => { console.log(new Date() + " | Postgres Server Authenticated..."); }) .catch((err) => { console.log(new Date() + " | Postgres Server Error in connection..."); console.log(err); }) .finally(()=> { self.dbconn = this; callback(this); }); }; return pgClient; }; module.exports = createPgClient; 中使用此工厂功能创建客户端。

app.js