0

我是 Node.js 的初学者,最近我试图分析以下代码:http ://howtonode.org/express-mongodb 。但我卡住了。我真的不明白这段代码是如何工作的:articleProvider。findAll(function(error, docs){ res.send(docs); });

此方法调用如下所示的 findAll 函数: var articleCounter = 1; ArticleProvider = function(){}; ArticleProvider.prototype.dummyData = [];

ArticleProvider.prototype.findAll = **function(callback) {
 callback( null, this.dummyData )
};**

一个方法 findAll 怎么能用一个甚至没有声明的函数回调来调用?!谢谢你的帮助

4

3 回答 3

4

以下片段:

ArticleProvider.prototype.findAll = function(callback)
...

声明ArticleProvider.findAll为一个本身作为参数的函数,一个名为callback. 当您调用ArticleProvider.findall(foo)时,该函数foo使用两个参数调用:null作为第一个参数,ArticleProvider.dummyData作为第二个参数。

最好从一本好的 Javascript 书籍开始,例如 Crockford 书籍。祝你好运。

[编辑]

我在下面的回复之一中看到了使用 Mongoose 的建议,但是在使用它之后,我现在更喜欢 Guillermo Rauch 的Monk。它比 Mongoose 简单得多,它可以让您在没有模式的情况下工作。对于那些你只需要在 MongoDB 上添加一个简单层的情况,Monk 为我做了诀窍。

于 2013-05-23T00:17:26.280 回答
1

Ram 做了很好的解释,但我想补充一下,如果你是新手,你可能想看看“mongoose”,而不是直接使用 mongodb。大多数新开发人员发现它更容易一些,因为它被广泛使用(不是 mongodb 直接不是,而是......)你可能会发现它更容易找到样本。这是使用mongoose的快速示例。

// require your model
var Product = require('../models/product.js');

// example getting a product by id using mongoose.
app.get('/product/:id, function (req, res) {
      Product.findOne({ _id: id }, function (err, product) {
        if(err) 
           console.log(err + '');
        else
           res.render('product, { title: 'Your Title', model: product });
     });
});

祝你好运!

于 2013-05-23T00:46:10.550 回答
1

一个方法 findAll 怎么能用一个甚至没有声明的函数回调来调用?!

你打电话时

articleProvider.findAll(function(error, docs){ res.send(docs); });

您正在声明该函数内联,然后将其作为参数传递以查找所有内容。“function(error, docs){ res.send(docs); }” 是您声明函数并将其作为参数传递的地方。

正如 Ram 所指出的,您可以先声明该函数(称为 foo),然后将其作为参数传递:

var foo = function(error, docs){ res.send(docs); }
articleProvider.findAll(foo);

请注意,无论哪种情况,您都将函数作为参数传递,而不是执行函数的结果。

于 2013-05-23T01:42:08.573 回答