使用req.params数组的Mongoose .find?和res.json每个值和计数的数组?

时间:2014-06-08 02:06:10

标签: javascript arrays node.js express mongoose

理想情况下,用户可以在搜索字段中输入多个标签,然后在客户端(在.get调用之前)取消,通过每个按键在ajax上发送。

在服务器端工作(使用Postman测试API),如果.get将变量标签作为['tag1','tag2']的数组提供,可以req.params.tags是一个数组?

如果是这样,服务器会是什么样子 - 现在,我只收到Postman对localhost的响应:4200 / api / v1 / tag / tagName ..但不是/ tag / tagName1 + tagName2或/标签/ tagName1&安培; tagName2

以下是当前的API:

router.route('/tag/:tags')

    // get the list of tags for userGenerated tags (accessed at GET http://localhost:4200/api/v1/tag/:tags)
    .get(function(req, res) {

        Story.count( { tags: { $in: [  req.params.tags ] } }, function (err, count) {

            if (err)
                res.send(err);

            console.log('there is/are %d story/ies with this/these tag(s)', count);

            if (count >= 1) {

                Story.find( { tags: { $in: [  req.params.tags ] } }, 'tags', function(err, stories) {

                    if (err)
                        res.send(err);

                    res.json(stories); // something to return the count of each tag with the tag

                }); // find and return tags

            } // if count >= 1

            if (count < 1) {

                res.json({ message: count + ' results' });

            } // if count < 1 

        }); // .count

    }); // get list of tags

其次,我是否需要使用.aggregate(还没有真正探索这个)然后res.json我可以循环的标签的ARRAY来获取每个tagName和每个特定标签的计数。

1 个答案:

答案 0 :(得分:2)

这实际上不是一个特定于mongo的问题,这是一个明确的问题(我假设你在这里使用快递)。

快递没有办法自动将动态片段(网址中以:为前缀的部分)解析为数组,但您可以自己轻松完成:

// example url: /tags/tag1,tag2
app.get('/tags/:tags', function(req, res){
  var tags = req.params.tags.split(','); // ['tag1','tag2']
  res.send('you entered tags :' + tags.join(','));
});

这是一个可运行的示例:http://runnable.com/U5SI2eAfzMh7Sfkt/example-reading-an-array-of-arguments-in-req-params-with-express-for-node-js-and-hello-world