0

User.js クラスに次のコードがあります。

exports.findUser = function(nameIn){
  User.find({
    name: nameIn
  });
)};

見つかったユーザーを「返す」にはどうすればよいですか? ノードで「リターン」を使用することはベストプラクティスではないということですか? コールバックを使用する必要があると思いますが、どうすればよいですか?

これは、関数を呼び出すために使用しているコードです。

var User = require("../models/user.js");

User.findUser(req.params.name, function(users) {
  console.log(users);
});
4

1 に答える 1

1

findUser では、そのコールバックの場所を提供していないようです。mongoose クエリ自体も、ドキュメント (またはエラー) をコールバックに返して処理します。

findUser見た目に合わせて変更したい場合は、次のようにします。

exports.findUser = function(nameIn,callback){
  User.find({name: nameIn}, function(err,user) {
    if (err)
      throw err;
    callback(user)
  });
)};

mongoose のクエリの結果 (成功または失敗) は、クエリの引数の関数に (コールバックとして) 渡されます。これは、Node.js の非同期の性質に沿っています。Node の非ブロッキング I/O を処理するその他の一般的に受け入れられている方法はeventsstreamであり、promise のような方法は多少物議を醸す場合でも実行可能です

Mongoose 自体は、そのガイドでコールバックを使用しますが、promise も利用できます

今あなたの関数を見ると、クエリする名前と、返されたドキュメントで何をしたいのかをコールバックとして渡しています。マングース関数自体には、すでにすべての機能があります。

User.find({name: req.params.name}, function(err,user) {
  if (err)
    throw err;
  console.log(user);
});

定義する価値があるのは、DRY を維持するfindUserドキュメントで操作することがたくさんある場合のみです。findUser

于 2013-07-25T14:00:27.603 に答える