function _allUsers(callback){
var db = connect.get();
db.collection("users").find({}).toArray(function(err,data){
if(err){
callback(err);
}else{
callback(null,data);
}
});
}
我正在尝试理解这段代码,我一直在寻找网络,但我发现解释有点不明白(我是Mean的新手),所以我的问题是:
Collection方法有什么作用?我不确定,但字符串“users”只是我们所有用户的收藏品名称?
为什么我们必须在这种情况下使用回调? (我发现回调非常令人困惑)。
为什么我们必须给一个匿名函数赋值函数?
我可以使用漂亮的方法()而不使用任何匿名函数作为参数来代替toArray吗?
答案 0 :(得分:1)
MEAN Stack是一个软件程序包,支持用所有javascript编写的应用程序。这意味着您可以使用数据库中的javascript,以及后端和前端。
MEAN实际上代表堆栈中包含的每个软件程序的第一个字符。 M ongoDB, E xpressjs, A ngularJS和 N odeJS。
<强> 1 强>
MongoDB是一个NoSQL数据库,它使用BSON(类似于JSON)来存储所谓的documents
。查看文档,就好像它是传统数据库中的单个实体或行一样。这些实体(或行)存储在collections
(文档集合)中,可以与表进行比较。
因此,您对第一个问题的回答是打开users
集合,该集合授予对所有用户文档的访问权限。
<强> 2 强>
NodeJS在设计上是异步的。这允许NodeJS在单个线程*上运行时执行大量操作。因为NodeJS是单线程的,所以我们需要一种编写代码non-blocking
的方法,这意味着我们可以启动一个操作,继续执行其他代码并在该操作完成时返回。
在您的情况下,我们请求访问users
集合,这需要一些时间。为了允许我们的应用程序的其他部分继续处理,我们使用回调。当我们访问我们的集合时,我们会执行回调,并且当我们第一次请求访问时,我们可以执行我们想要执行的任何操作。
* NodeJS实际上在多个线程上运行,但开发人员永远不必担心多线程,NodeJS会为我们做这件事。'
第3 强>
这正是前一点的内容。
.toArray()
方法返回一个包含游标中所有文档的数组。该方法完全迭代光标,将所有文档加载到RAM中并耗尽光标。 Source
.toArray()
是一项计算密集型操作。由于我们不想等到直到.toArray()
完成但是继续处理我们的其余代码,我们给它一个callback
,以便我们可以在它准备就绪时回到我们的集合处理。
<强> 4 强>
从我可以从docs读到的内容我想你确实可以编写阻止代码并以这种方式执行:
var users = db.collection("users").find({}).toArray();
然而,这将完全阻止您的代码。没有充分的理由这样做。
免责声明:为了便于理解,我在此解释中遗漏了或过于简单的细节。
答案 1 :(得分:0)
db.collection('users')
this will return the users collection instancetoArray
is its callbackwithout any annonymous function as a parameter
expressjs is an asynchronous programming, we need callback || Promises
答案 2 :(得分:0)
您可以将MySQL中的表格视为表格。集合由文档(MySQL中的行/项/记录)组成。您的示例调用Users
集合并查找其中的所有文档(记录)
关于回调 - NodeJS / Express通常是面向回调的。这是他们使用的模式,大多数代码都使用它,因为它是asynchronous
。如果您需要确保在其他代码段之后立即执行某些代码段,则必须使用回调(或承诺)。
调用toArray()取决于你的回调期望。如果回调需要find()
方法返回的Query对象,则可以跳过调用此方法。所有这些都取决于你的回调
您也可以使用非匿名函数,但必须记住asynchronous
逻辑并继续使用回调/承诺。您可以在this Quora的文章中阅读有关回调和承诺的更多信息
Here您可以找到有关find()
方法的更多信息。