2017-07-02 5 views
0

私はNodeJSとMongoDBの初心者です。 HTMLからユーザー入力を受け取り、MongoDBにクエリとして渡したいと思います。私はMongoDBを要件に応じて索引付けしました。私はこのコードで立ち往生しています。 server.jsを実行するたびにエラーが発生し、MongoDBが自動的に切断されます。私を助けてください。MongoDBが自動的に切断され、Nodejsを使用してレコードを取得できない

//user_query.js 

var http = require('http'); 
var MongoClient = require('mongodb').MongoClient; 
var url = "mongodb://localhost:27017/newDB"; 
var express = require('express'); 
var app  = express(); 
var bodyParser = require('body-parser'); 

app.use(bodyParser.urlencoded({ extended: true })); 

var varName, search; 

var name = app.post('/product_search', function(req, res, callback) { 
    res.send('Searching for "' + req.body.query + '".'); 
    search = req.body.query; 
    callback(search); 
}); 

app.listen(8080, function() { 
    console.log('Server running at http://127.0.0.1:8080/'); 
}); 

module.exports = { varName: search }; 


//search.js 
var http = require('http'); 
var MongoClient = require('mongodb').MongoClient; 
var url = "mongodb://localhost:27017/newDB"; 
var express = require('express'); 
var app  = express(); 
var user_query = require('./user_query'); 

//console.log("Hello: "+user_query.varName); 

MongoClient.connect(url, function(err, db) { 
    if (err) throw err; 

    db.collection("cellPhones").find({$text:{$search: user_query.varName}}).toArray(function(err, result) { 
     if (err) throw err;  
     console.log(result);  
    }); 
    db.close(); 
});`enter code here` 
+0

( 'db.closeを削除user_query'ファイル –

+0

'の内容を投稿してください) 'または少なくとも場所それ.toArray'のコールバック「内の」() '問題は、実際のクエリが実行または終了する前に「閉じる」呼び出しが「前に」作成されることです。コールバックに入れると、接続が閉じられる前に結果が返されます。 'console.log(result); db.close()//ここに入れてください。 } //ここでdb.close()を削除してください。 –

+0

@BertrandMartel返信ありがとうございます。最初のコードスニペットはuser_query.jsです。 –

答えて

0

あなたは基本的にnext(search)あなたがルータであなたのハンドラで終わるとミドルウェアにいくつかのデータを渡しているcallback(search)を、言います。

nodejsの規則によると、コールバックの最初の引数は - errorです。だから、あなたがしていることは、何かを投げている間違いです。 これが最初の問題です。限り、あなたが選んだとして、そして、(ミドルウェアとの)このようなアプローチを

next(null, search); 

- あなたはデータベースを照会し、ブラウザに応答すること、どこかでこのクエリミドルウェアを提供する追加する必要があります。だから、あなたはそれをこのように解決する必要があります。非常に(あなたルート追加した後)スクラッチ:

app.use(function(err, req, res) { 
    // query db 
    // send result to the res.send(); 
}); 
+0

すぐに応答していただきありがとうございます。私はちょっと混乱している。私は次のようでした:app.use(関数(errは、REQ、RES){// クエリデシベル \t MongoClient.connect(URL、機能(ERR、デシベル){ \t \tを(ERR)がERRを投げる場合、 \t \t \t \t db.collection( "携帯電話")({$テキスト:{$検索: user_query.varName}})を見つけるのtoArray(関数(errが、結果){ \t \t \t(ERR)がERR投げる場合;。。 \t \t \t \t \t console.log(結果); \t \t \t db.close(); \t \t \t \t}); \t \t //db.close(); \t}); //結果をres.send()に送ります。 });どのファイルを最初にコンパイルすればよいですか? user_query.jsまたはsearch.js –

+0

サーバinitでmongo接続を作成します。その後、それを使用してください。コンパイルするとどういう意味ですか? – Lazyexpert

関連する問題