首页 > 解决方案 > 函数和参数传递

问题描述

我是节点 js 及其回调方案的新手。我很难理解这段代码的某些部分,如下所述:

在 mongoUtil.js 模块中找到的代码:

 var _db;
 module.exports = {
  connectToServer: function(callback) {
   MongoClient.connect(url, function(err, client) {
    _db  = client.db('MyDB');
    return callback(err);
   });
  },
 };

在我的 app.js 模块中找到的代码:

mongoUtil.connectToServer(function(err, client) {
 if (err) console.log(err);
 ...
});

问题:

i) 为什么有一个“function(err, client)”从 app.js 文件传递​​到 mongoUtil 文件中的 connectToServer 函数?

  1. 将什么值传递给 MongoClient.connect 函数的“client”参数,该参数在函数本身(client.db('MyDB'))中使用?

标签: javascriptnode.jsmongodbexpress

解决方案


将什么值传递给 MongoClient.connect 函数的“client”参数,该参数在函数本身(client.db('MyDB'))中使用?

client参数不传递给connect函数,它是匿名函数定义中的一个参数,然后将anonymouns函数传递给connect函数。

MongoClient.connect 函数在这里定义: https ://github.com/mongodb/node-mongodb-native/blob/master/lib/mongo_client.js#L205-L220

它接受 2 个参数:一个 URL 和一个函数

它期望提供的函数也将接受 2 个参数:错误和客户端。

当 connect 函数完成它的工作时,它将调用它被传递的函数而不是返回一个值。

为什么从 app.js 文件传递​​到 mongoUtil 文件中的 connectToServer 函数中有一个“function(err, client)”?

看起来这个 app.js 和 mongoUtils.js 不是为了一起工作而创建的。

connectToServer从函数导出的设置了一个模块变量,_db而不是将客户端传递给回调,这似乎是 app.js 中的函数调用所期望的。


推荐阅读