小编Eri*_*rik的帖子

node.js纤维与pg/postgres

我一直在试图弄清楚如何使用node-fiber来使我的数据库代码在node.js中不那么混乱,但我无法让它工作.我将代码简化为最小测试用例:

var Future = require('fibers/future');
var pg=require('pg');

var connstr = "pg://not_the_real_user:or_password@localhost/db";
var pconnect = Future.wrap(pg.connect);

Fiber(function() {
    var client = pconnect(connstr).wait();
    console.log("called function");
}).run();
Run Code Online (Sandbox Code Playgroud)

如果我保持原样,我会收到以下错误:

pgfuture.js:10
}).run();
   ^
TypeError: undefined is not a function
    at Object.PG.connect.pools.(anonymous function).genericPool.Pool.create (/home/erik/code/treehouse-node/node_modules/pg/lib/index.js:49:20)
    at dispense (/home/erik/code/treehouse-node/node_modules/pg/node_modules/generic-pool/lib/generic-pool.js:223:17)
    at Object.exports.Pool.me.acquire (/home/erik/code/treehouse-node/node_modules/pg/node_modules/generic-pool/lib/generic-pool.js:267:5)
    at PG.connect (/home/erik/code/treehouse-node/node_modules/pg/lib/index.js:75:15)
    at Future.wrap (/home/erik/code/treehouse-node/node_modules/fibers/future.js:30:6)
    at /home/erik/code/treehouse-node/pgfuture.js:8:18
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释掉调用pconnect的行,我在控制台上得到"被调用的函数"消息并且没有错误.github页面上的示例具有几乎相同的结构,并且它在我的系统上正常工作,但我很困惑我在这里做错了什么.

编辑:其他详细信息

我已经设法让代码以一种似乎无关的两种不同方式运行,但两者都有相同的行为.函数完成后,节点只挂起,我必须用ctrl-c杀死它.以下是我为获得该结果所做的两件事:

1)在匿名函数中包装pg.connect,然后用Future包装THAT:

pconnect = Future.wrap(function(err,cb){pg.connect(err,cb);});
Run Code Online (Sandbox Code Playgroud)

2)这个是一个真正的谜,但似乎有相同的结果.在光纤内部,我只是在调用pconnect之前直接调用pg.connect,一切似乎都解决了.

// add this line before call to pconnect
pg.connect(connstr, function(e,c){console.log("connected.");});
// and now the original call to pconnect
var client …
Run Code Online (Sandbox Code Playgroud)

postgresql node.js node-fibers

11
推荐指数
1
解决办法
1080
查看次数

标签 统计

node-fibers ×1

node.js ×1

postgresql ×1