2017-10-09 6 views
4

node-postgres 드라이버를 통합하려고하고 간단한 CRUD 작업을 수행하는 방법을 배우고 있습니다. 내 app.js, 나는 이런 식으로 뭔가를 할 :노드 - 노드 포스트그레스가있는 Postgres 드라이버 설정

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

, 나는 다음과 같은 내용이 있습니다

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

좋은 예 : [노드와 포스트그레스로 RESTful API 설계하기] (http://mherman.org/blog/2016/03/13/designing-a-restful-api-with-node-and-postgres/). –

+0

@ vitaly-t 고마워, 나는 그걸 기지로 사용할거야! 이해를 위해서 현재 코드를 도와 주시겠습니까? – JackSlayer94

답변

2

구성 개체를 사용하고 클라이언트의 인스턴스를 반환하는 팩터 리 함수를 내 보냅니다. Clientpg의 기본 내보내기가 아니므로 해체해야합니다.

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