函数返回rethinkdb连接

时间:2016-10-06 07:00:27

标签: node.js rethinkdb

您好我正在创建一个API并从rethinkdb获取数据,因为我正在使用以下代码:

r.connect({
  host: 'localhost',
  port: 28015,
  db: 'test'
}, function (err, conn) {
  if (err) throw err;

  r.table('users').filter({email: user_data.name}).count().run(conn, (err, count) => {
    conn.close();
    if (err) {
      return res.status(404).send({ success: false });
    }
    else if (count == 0) {
      return res.status(401).send({ success: false });
    }
    return res.send({ success: true });
  });
});

但我需要创建多个API,为此我不想重复连接代码。

我想创建一个返回rethinkdb连接的常用函数。

我使用了以下代码:

global.con = r.connect({
    host: 'localhost',
    port: 28015,
    db: 'test'
});

并使用con作为连接对象,但它给出了错误:

未处理的拒绝ReqlDriverError:run的第一个参数必须是开放式连接。

使用此:

 function findItem () {
   r.connect({
     host: 'localhost',
     port: 28015,
     db: 'test'
   }, function (err, conn) {
     if (err) throw err;

     return conn;
   });
 }

 global.c = findItem();

但仍然是未定义

2 个答案:

答案 0 :(得分:0)

您无法从回调中返回任何内容,异步代码无法正常工作,您可以自行查看:

function connect () {
  r.connect({ host: 'localhost', port: 28015, db: 'test' }, () => {
    console.log('callback called'); 
  });
}

connect();

console.log('connect function finished');

它将以相反的顺序打印此消息,因为在其余代码之后执行回调:

connect function finished
callback called

many solutions for this problem

此外,使用global并从回调中抛出异常是个坏主意。我强烈建议您阅读有关异步编程如何工作的更多信息。

答案 1 :(得分:0)

我使用了以下代码..

app.use(function(req,res,next){
 r.connect({
    host: 'localhost',
    port: 28015,
    db: 'test'
 },function(err,conn){
    req['app_conn']=conn;
    next();
 });
});

并使用 req.app_conn 作为rethinkdb连接对象