2017-07-02 134 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

请张贴的'user_query'文件 –

+0

内容删除'db.close()'或至少它的地方“内” .toArray的'回调() '问题是在实际查询被执行或完成之前,“关闭”调用被“取消”。因此,将其放入回调中可确保在连接关闭之前返回结果。 '的console.log(结果); db.close()//把我放在这里; } //在这里删除db.close()# –

+0

@BertrandMartel感谢您的回复。第一个代码片段是user_query.js ... –

回答

0

当你说callback(search),这基本上是next(search)你结束了在路由器的处理程序和一些数据传递给中间件。

根据nodejs约定,回调中的第一个参数是 - 错误。所以,你做了什么 - 是有点投掷错误。 这是第一个问题。所以,你应该解决这样说:

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,DB){ \t \t如果(ERR)抛出犯错; \t \t \t \t db.collection( “手机”)找到({$文字:{$搜索: user_query.varName}})。指定者(函数(ERR,结果){ \t \t \t如果(ERR)抛出走错了路。 \t \t \t \t \t console.log(result); \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