2017-10-09 1 views
4

私はnode-postgresドライバを統合しようとしており、簡単なCRUD操作を行うことを学んでいます。私のapp.jsでは、私はこのような何か:私のadapters/postgres.jsファイルの中ノード - ノードポストグレスを使ったPostgresドライバのセットアップ

... 
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); 
}); 

を、私は以下の内容があります。上記のコードでは

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。誰かがこれらの両方のエラーを修正する上でガイドできますか?

+0

@brianc何か助けていただければ幸いです! – JackSlayer94

+0

良い例:[NodeとPostgresでRESTfulなAPIを設計する](http://mherman.org/blog/2016/03/13/designinga-a-restful-api-with-node-and-postgres/) –

+0

@ vitaly-tありがとう、私はそれをベースとして使用します!理解を深めるだけで、現在のコードで私を助けることができますか? – JackSlayer94

答えて

2

設定オブジェクトを取得し、クライアントのインスタンスを返すファクトリ関数をエクスポートします。 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でこのファクトリ関数を使用してクライアントを作成します。

const createPgClient = require('./adapters/postgres') 
cont pgClient = createPgClient(conf); 

pg.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']); 

    const Routes = require('./routes/http-routes'); 
    new Routes(app); 
}); 
+0

上記のコードでは、次のエラーが発生します。 'var pgClient = createPgClient(conf); ^ ReferenceError:createPgClientが定義されていません – JackSlayer94

関連する問題