Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从节点中的回调返回连接_Node.js_Database_Async Await - Fatal编程技术网

Node.js 如何从节点中的回调返回连接

Node.js 如何从节点中的回调返回连接,node.js,database,async-await,Node.js,Database,Async Await,我想创建一个db.js文件,所有其他文件都可以使用。这个想法是,在db.js文件中创建的连接可以重用,而无需每次调用时重新连接到数据库 db.js 我想做像上面那样的事情(不起作用),但这个想法在我的app.js中我会设定 var db = require("./db") 它将返回连接。您可以包装.connect()调用一个承诺,并从模块返回此承诺,例如 const nodeq = require("node-q"); module.exports =

我想创建一个db.js文件,所有其他文件都可以使用。这个想法是,在db.js文件中创建的连接可以重用,而无需每次调用时重新连接到数据库

db.js

我想做像上面那样的事情(不起作用),但这个想法在我的app.js中我会设定

var db = require("./db")

它将返回连接。

您可以包装
.connect()
调用一个承诺,并从模块返回此承诺,例如

const nodeq = require("node-q");

module.exports = new Promise( (resolve,reject) => {
  nodeq.connect({host: "192.168.1.1", port: 5000}, function(err, con) {
    if (err) return reject(err);
    console.log("KDB connected");
    resolve(con);
  });
});
然后,在您的来电者中,您可以等待此承诺(仍然需要错误处理,但应该给您一个开始):

或者你会:

const dbConnPromise = require("./db");
//... then somewhere in your code where you need the db-connection, you can do:

async function doDbStuff() {
   const db = dbConnPromise();
   const result = await db.query(...);
}

每次我这样做,它会不会创建一个新的连接?不会,模块是缓存的。因此,
connect
-调用将仅在第一个需要时执行。请不要忘记接受它是否适合您。
const dbConnection = await require("./db");
const dbConnPromise = require("./db");
//... then somewhere in your code where you need the db-connection, you can do:

async function doDbStuff() {
   const db = dbConnPromise();
   const result = await db.query(...);
}