Javascript Node express+;MongoDB-使用param获取
我正在尝试使用参数创建get调用。到目前为止,我已经创建了get,它从MongoDB返回整个JSON:Javascript Node express+;MongoDB-使用param获取,javascript,regex,node.js,mongodb,Javascript,Regex,Node.js,Mongodb,我正在尝试使用参数创建get调用。到目前为止,我已经创建了get,它从MongoDB返回整个JSON: router.get('/movies', function (req, res, next) { var movies = req.db.get('movies'); movies.find({}, function (err, docs) { res.json({length: docs.length, records: docs}); });
router.get('/movies', function (req, res, next) {
var movies = req.db.get('movies');
movies.find({}, function (err, docs) {
res.json({length: docs.length, records: docs});
});
});
我如何创建get,只返回某一年的电影或某一年的片名或电影,但只返回dramma类型的电影
我试着:
router.get('/movies/:title', function (req, res, next) {
var title = res.title;
var movies = req.db.get('movies');
movies.find({title: title}, function (err, docs) {
res.json({length: docs.length, records: docs});
});
});
但邮递员返回空对象。
我做错了什么?要仅获取某一年的电影或某一年的片名或电影,但仅获取“戏剧”类型的电影,您需要定义REST API,以便将值列表作为URL请求参数传递,然后将其用作过滤器
例如,如果使用URL测试API:
http://your.api.com/movies?title=foo
路由器将只获取带有title=“foo”
的电影
如果将此URL用于GET请求:
http://your.api.com/movies?year=1996
路由器只接收1996年的电影
网址
http://your.api.com/movies?year=1996&type=drama
仅获取1996年的电影和戏剧类型的电影
在路由器实现中,使用包含路由中每个查询字符串参数的属性的对象作为查询。如果没有查询字符串,它将返回一个空对象,{}
,默认情况下,如果在方法中使用该对象,它将返回集合中所有可用的电影文档。因此,您的路由器将具有如下功能:
router.get('/movies', function (req, res, next) {
var movies = req.db.get('movies'),
query = req.query;
// convert year parameter string to int if it exists
if (query.hasOwnProperty("year")){
query["year"] = parseInt(query.year);
}
movies.find(query, function (err, docs) {
res.json({length: docs.length, records: docs});
});
});
标题没有多大意义。res是响应,随请求发送的任何内容都将在req上。可能您的意思是
req.params.title
?欢迎使用堆栈溢出;)@camel你到底在哪里不太明白?这个很好用:router.get('/movies/production',function(req,res,next){var production=req.params.production;var movies=req.db.get('movies');movies.find({production:production},function(err,docs){res json({length:docs.length,records:docs});});}); 但这不是:router.get('/movies/production',function(req,res,next){var query=req.query.production;var movies=req.db.get('movies');movies.find(查询,function(err,docs){res.json({length:docs.length,records:docs});});如果我的get integer(router.get('/movies/year')中有,那么它根本不起作用。如果您将API设计为URL请求的结构为http://your.api.com/movies?year=2001
然后var query=req.query
对象的值为{year:2001}
然后您可以将其作为find()
查询文档传递,如答案开头段落所述。@ArthurBrito将路由中的查询字符串参数更改为http://your.api.com/movies?title[]=foo&title[]=bar&title[]=zoo
而您的mongo查询将是find({'title':{'$in':req.query.title}})