您好我正在创建一个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();
但仍然是未定义
答案 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连接对象