Node express + MongoDB - get with param

时间:2015-10-06 18:44:06

标签: 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/: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});
    });
});

但Postman返回空对象。 我做错了什么?

1 个答案:

答案 0 :(得分:0)

只获得某些年份的某些电影或某些年份的电影电影,但只能获得那些电影"戏剧"键入,您需要定义REST API,以便将值列表作为URL请求参数传递,然后可以将其用作过滤器。

例如,如果您使用以下网址测试API:

http://your.api.com/movies?title=foo  

路由器只会获得title = "foo"的电影。

如果您将此网址用于GET请求:

http://your.api.com/movies?year=1996 

路由器只获得1996年的电影。

网址

http://your.api.com/movies?year=1996&type=drama 

只获得1996年的电影和那些具有戏剧类型的电影。

在路由器实现中,使用包含路由中每个查询字符串参数的属性的req.query对象作为 find() 查询。如果没有查询字符串,则会返回一个空对象{},默认情况下,如果在 find() 方法中使用该对象,则会返回集合中所有可用的电影文档。因此,您的路由器将具有以下内容:

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