2016-06-21 6 views
0

私はnode.js, express, and mongooseを初めて使っています。以下は私のコードです。マングースのfindOneメソッドが自分の変数を認識していませんか?

findOneメソッドで値「P4」をハードコードしていますが、すべて正常に動作することに注意してください。

product変数を使用しようとすると、findOneメソッドで認識されません。

私は間違っていますか?

router.get('/search', function(req, res) { 
var product = req.body.product; 
MyData.findOne({product: **'P4'**}, function(err, doc) { 
    if (doc) 
    { 
     console.log('Product Found', doc); 
     res.render('index',{ids: doc}); 
    } 
    else if (err) 
    { 
      res.redirect('/'); 
      console.error ('Doc Not found', doc); 
    } 
    }); 
}); 
+2

'findOne()'メソッドの前にproduct変数の値をconsole( 'console.log(product)')に出力すると、何が得られますか? – chridam

+0

エラーが生じますか? – Shrabanee

答えて

1

あなたは、クエリ文字列を使用してパラメータを渡される(一般的に)GETルートを定義しています。つまり、/search?product=P4です。コーディングに

var product = req.query.product; 
+0

ありがとうございます。 req.query.productを使用しても、私はvar製品(P4に設定された製品)を設定しても、mongoDBデータベースの最初のレコードだけを取得するだけです。以下の私にconsole.log結果は次のとおりです。商品が見つかり{__v:0、 価格: '95'、 顧客: 'C100'、 quanity: '100'、 製品: 'P10'、 _id:5768c29a1546a45c49d259a0} GET/search?product = p4 304 109.851 ms - - GET /stylesheets/style.css 304 12.371 ms - - GET /images/lens-1278491_1920.jpg 304 1.109 ms - - – Russ

+0

アップデート。 「製品」の変数置換を使用する代わりに「P4」をハードコアすると、クエリが機能します。 \t MyData.findOne({product:product}、function ...ただし、これはMyData.findOne({product: 'P4'}、関数...)で動作します。 P4製品が見つかりました{__v:0、price: '120'、顧客: 'C17'、quanity: '200'、製品: 'P4'、... .... thanks russ – Russ

+0

このクエリの "product"変数はmongooseによって無視されているようです。変数に "random data"を置き換えても、次のようになりました - Product Found {__v:0、 値: '95'、 顧客: 'C100'、 quanity: '100'、 プロダクト: 'P10'、.....このステートメントで変数を使用するようにFindOneクエリを強制するにはどうすればよいですか? FindOne(、機能..... Thks – Russ

0

非常に基本的なヒント:

これは、代わりにreq.bodyの、あなたがproductパラメータにアクセスするためにreq.queryを使用しなければならないことを意味します。 常に常にconsole.log(変数)。それが未定義の場合。変数がその場所で利用できないことを意味します。ステップバイステップでデバッグしてみてください。

+0

Narayaに感謝します。すべての場合において、ドキュメントは正常に返されますが、間違ったドキュメントが返されます。 – Russ

関連する問題