Nodejs使用表单中的数据为单个条目快速查询mongolab

我是一个Nodejs新手,并试图使用来自表单条目的数据在我的MongoDB数据库中search条目(我知道存在)。 这是我的代码:

var express = require('express'); var mongoose = require('mongoose'); var bodyParser = require('body-parser'); var cors = require('cors'); var path = require('path'); const MongoClient = require('mongodb').MongoClient; var app = express(); app.set('view engine', 'ejs') const port = 3000; MongoClient.connect('mongodb://<user>:<password>@ds111882.mlab.com:11882/serene-brushlands-55292-db', function(err, database) { if(err) return console.log(err); db = database app.listen(port, function() { console.log('Server started at port:'+port); }); }); // var urlencodedParser = bodyParser.urlencoded({ extended:false }); app.use(bodyParser.urlencoded({extended:false})); app.get('/', function(req, res) { res.sendFile(__dirname+'/index.html'); }); app.all('/addUser', function(req, res) { res.render('addUser'); db.collection('users').save(req.body, function(err, result) { if (err) return console.log(err); console.log('saved to database'); }) console.log(req.body); }); app.get('/outputAll', function(req, res) { db.collection('users').find().toArray(function (err, result) { if (err) return console.log(err); res.render('outputall', {users:result}); }); }); app.get('/Search', function(req, res) { res.render('search'); var query = {} console.log(req.body); if (req.body.username) { console.log("true"); query.username = req.body.username; } db.collection('users').find({query}).toArray(function(err, result) { if (err) return console.log(err); console.log(1); }); }); 

search部分是为了完成这个目标。 但我不知道如何从我的input表单收集查询,并将其传递给这个app.get并将其传递到数据库,在那里它被search。 这里是Search ejs文件:

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>MY APP</title> </head> <body> <div style="margin: 0 auto;width: 500px;"> <form action="/Search" method="GET" style="margin: 0 auto; width: 200px; margin-top: 100px;"> <input type="text" placeholder="Search" name="username" style="margin: 20px auto; font-size: 50px;"> <!-- <input type="file" name="picture"> --> <button type="submit" style="margin: 20px auto; font-size: 50px;">Submit</button> </form> </div> </body> </html> 

当我运行这个控制台上的输出是:

服务器端口:3000开始

{}

[]

{}

[]

我希望{}form数据, []是在数据库中search查询的结果。 请帮忙!

– – – – – – – – 编辑 – – – – – – – – –

将表单方法更改为post收到的响应是:

 Request body = undefined [ { _id: 59384e971f8bc03d4ef35486 }, { _id: 59385153304b40406d49ad28 }, { _id: 5938519c58358a40e55cded8 }, { _id: 593889193448616054a95b0d }, { _id: 59388945b268a0607bce2e9c }, { _id: 5938894bb268a0607bce2e9d, username: 'asfj', specialty: 'lkjsf', address: 'lkjsdf' }, { _id: 59388ae40d294f6168c55ccf }, { _id: 59388ddeba074c630a1a8861 }, { _id: 5938922a9f549f667c9f7a91 }, { _id: 5938c29c453e40053965e9eb }, { _id: 5938c2f9453e40053965e9ec, username: 'abc', specialty: 'dsfsaddfjk', address: 'oidjfioa' }, { _id: 5938c327453e40053965e9ed } ] Request body = abc [ { _id: 59384e971f8bc03d4ef35486 }, { _id: 59385153304b40406d49ad28 }, { _id: 5938519c58358a40e55cded8 }, { _id: 593889193448616054a95b0d }, { _id: 59388945b268a0607bce2e9c }, { _id: 5938894bb268a0607bce2e9d, username: 'asfj', specialty: 'lkjsf', address: 'lkjsdf' }, { _id: 59388ae40d294f6168c55ccf }, { _id: 59388ddeba074c630a1a8861 }, { _id: 5938922a9f549f667c9f7a91 }, { _id: 5938c29c453e40053965e9eb }, { _id: 5938c2f9453e40053965e9ec, username: 'abc', specialty: 'dsfsaddfjk', address: 'oidjfioa' }, { _id: 5938c327453e40053965e9ed } ] 

我已经将add.get('Search',fn)更改为:

 app.all('/Search', function(req, res) { res.render('search'); db.collection('users').find().toArray(function(err, result) { if (err) return console.log(err); var query = {} console.log("Request body = "+req.body.username); // if (req.body.username) // { // console.log(req.body); // query.username = req.body.username; // } console.log(result); }); }); 

你正在做的/Search请求是使用GET请求而不是POST 。 如果你想通过请求体访问表单数据,我build议你使用POST方法或者访问URL方法的GET参数。

接收到数据后,可以通过创build一个对象来格式化查询。

在mongoose,你应该通过发送对象作为参数在你的数据库中find文件。 例如,如果您正在数据库中寻找名为john的人,请使用

db.collection('users').find({name: 'John'}).then(function(resp){}).catch(function(err){})

{name:'John'}是你的mongoose会在执行查询时使用的对象

既然你说你是新的,学习这种称为承诺的模式是有用的。