Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node express+;MongoDB-使用param获取_Javascript_Regex_Node.js_Mongodb - Fatal编程技术网

Javascript Node express+;MongoDB-使用param获取

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}); });

我正在尝试使用参数创建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});

    });
});
我如何创建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}})