繁体   English   中英

Node Express + MongoDB-通过参数获取

[英]Node express + MongoDB - get with param

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

我正在尝试:

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年以来的电影以及具有戏剧性的电影。

在您的路由器实现中,使用包含路由中每个查询字符串参数属性的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});    
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM