2017-02-02 7 views
1

Node.js 앱을 PostgreSQL 서버에 연결하려고합니다. 처음에는 문서 here의 예와 같은 new pg.Client()를 선언 한에서net.Stream가 생성자가 아닙니다 - Node Postgres

bundle.js:16177 ERROR: TypeError: net.Stream is not a constructor 
at new Connection (bundle.js:10133) 
at new Client (bundle.js:9704) 
at Object.create (bundle.js:11308) 
at Pool._createResource (bundle.js:510) 
at Pool.dispense [as _dispense] (bundle.js:498) 
at Pool.acquire (bundle.js:573) 
at Pool.pool.connect (bundle.js:11359) 
at PG.connect (bundle.js:10876) 
at bundle.js:1642 

하지만, 위의 오류가 나쁜 수 있습니다 발견 가지고 : 내가 사용하는 상관없이, 나는 같은 오류로 끝날 것 같다 this 스택 오버 플로우 게시에 따른 아이디어.

나는 pg.connect()를 사용하여 시도 : 여기
var pg = require('pg'); //postgresql dependency 
var connectionString = "postgres://postgres:[email protected]/localhost:5432/Milestone1DB" 

console.log("Initiating..."); 
//var connectionString = "postgres://postgres:[email protected]/localhost:5432/Milestone1DB"; 
//var client = new pg.Client(); 

//connect to the database 
console.log("Attempting to connect to the database"); 
pg.connect(function (err, client, done) 
{ 
    if(err) 
    { 
    console.log("Error connecting to the database."); 
    throw err; 
    } 

    client.query("SELECT DISTINCT state FROM business ORDER BY state", function (err, result) 
    { 
    if(err) 
    { 
     console.log("Query resulted in an error."); 
     throw err; 
    } 

    console.log(result.rows[0]); 

    client.end(function (err) 
    { 
     if(err) 
     { 
     console.log("Error disconnecting from the databse."); 
     throw err; 
     } 
    }); 
    }); 
}); 

내가 시도 PG-약속 코드입니다 : 내가 모르는 뭔가가 있어야합니다

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

var cn = { 
    host: 'localhost', // server name or IP address; 
    port: 5432, 
    database: 'Milestone1DB', 
    user: 'postgres', 
    password: 'thisissuchagoodpassword' 
}; 

var db = pgp(cn); // database instance; 

db.any("select distict state from business order by state;") 
    .then(data => { 
     console.log("DATA:", data); 
    }) 
    .catch(error => { 
     console.log("ERROR:", error); 
    }); 

,하지만 난 어디 있는지 모르겠어요. 이 오류의 의미를 파악하는 데 도움을 줄 수있는 사람에게 감사드립니다.

+0

''pg-promise' 사용법이 잘못되었습니다. 'var pgp = require ('pg-promise'); 대신에 문서에 따라'var pgp = require ('pg-promise') (/ * 초기화 옵션 * /);'이 있어야합니다. –

+0

@ vitaly-t, 응답 해 주셔서 감사합니다. 내 응용 프로그램에서'require()'를 정의하기 위해 Browserify를 사용하고 있는데 문서의 두 번째 매개 변수'var pgp = require ('pg-promise')();를 추가하면' require (...)는 함수가 아닙니다. ' 내가 Browserify 외에 뭔가를 사용해야합니까? –

+0

'pg-promise'는 엄밀히 말하면 서버 측 모듈입니다. 왜 Browserify를 사용해야할까요? :) –

답변

0

net 프로토 타입 체인을 손상시키고 Stream()과 같은 메서드를 제거하는 컨텍스트 경계를 넘지 않도록하십시오. 노드 7.5와 pg-live-select에서 비슷한 처리되지 않은 약속 예외가 발생했습니다. 그러나 그물 참조가 전달되는 방식 때문에 간헐적으로 발생했습니다. 나는 V8 인스펙터를 사용하고 connection.js의 13 행 바로 위에 '디버거'문을 두어 버려 부패를 잡았다.

node_modules/lib/connection.js:13 
    this.stream = config.stream || new net.Stream(); 
           ^

TypeError: net.Stream is not a constructor 
    at new Connection (node_modules/pg-live-select/node_modules/pg/lib/connection.js:13:34) 
    at new Client (node_modules/pg-live-select/node_modules/pg/lib/client.js:26:37) 
    at Object.create (node_modules/pg-live-select/node_modules/pg/lib/pool.js:27:24) 
    at Pool._createResource (node_modules/generic-pool/lib/generic-pool.js:325:17) 
    at Pool.dispense [as _dispense] (node_modules/generic-pool/lib/generic-pool.js:313:12) 
    at Pool.acquire (node_modules/generic-pool/lib/generic-pool.js:388:8) 
    at Pool.pool.connect (node_modules/pg-live-select/node_modules/pg/lib/pool.js:78:14) 
    at PG.connect (node_modules/pg-live-select/node_modules/pg/lib/index.js:49:8) 
    at LivePg._updateQuery (node_modules/pg-live-select/index.js:295:6) 
    at node_modules/pg-live-select/index.js:160:14 
    at Array.forEach (native) 
    at Timeout.performNextUpdate [as _onTimeout] (node_modules/pg-live-select/index.js:159:23) 
    at ontimeout (timers.js:365:14) 
    at tryOnTimeout (timers.js:237:5) 
    at Timer.listOnTimeout (timers.js:207:5)