0

私は Node.js の初心者で、最近http://howtonode.org/express-mongodbからコードを分析しようとしました。しかし、私は立ち往生しています。このコードがどのように機能するのか本当にわかりません: articleProvider. findAll(関数(エラー、ドキュメント){ res.send(ドキュメント); });

このメソッドは、次のような findAll 関数を呼び出します。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は 2 つnullの引数 (最初の引数とArticleProvider.dummyData2 番目の引数) で呼び出されます。

Crockford book などの優れた Javascript の本から始めるのが最善かもしれません。幸運を。

[編集]

以下の応答の 1 つに Mongoose を使用するという提案が表示されますが、使用した後は、Guillermo Rauch's Monkの方がずっと好きです。Mongoose よりもはるかに単純で、スキーマなしで作業できます。MongoDB の上に単純なレイヤーが必要な場合は、Monk がそのトリックを実行してくれました。

于 2013-05-23T00:17:26.280 に答える
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 に答える
1

Ram はうまく説明してくれましたが、あなたが初めての場合は、mongodb を直接操作するのではなく、「mongoose」を調べた方がよいかもしれません。ほとんどの新しい開発者は、それが少し簡単で、広く使用されているため (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 に答える