如何从Node.js和Express

时间:2018-05-14 14:18:11

标签: json node.js express

我是第一次使用node.js和表达框架开发REST API。我正在努力解决Node.js和Express中的一个非常小的问题,但是,我无法这样做。我已经在线检查了所有可能的解决方案,并尝试了我所知道的所有选项,但我无法弄清楚相同的语法。

背景:我有一个名为“Restaurant”的对象和另一个名为“Menu”的对象,它有一个外键引用“Restaurant”。

现在,我有一个要求(常见场景),我需要以下面的json格式向客户端发送响应,

{
  "Restaurants": [
    {
      "restaurantid":"5ad36b55c26b685030335e30",
      "restaurantname": "ABC Restaurant",
      "menus":[
         {"menuname":"item1", "menucost":"10"},
         {"menuname":"item2", "menucost":"20"}
    },
    {
      "restaurantid":"9sd72b55c26b685030335e31",
      "restaurantname": "XYZ Restaurant",
      "menus":[
         {"menuname":"item3", "menucost":"10"},
         {"menuname":"item4", "menucost":"20"}
    }
  ]
}

问题 - 我无法弄清楚如何构建 node.js中的“menus”对象并将其附加到我的“menus”变量中。我能够从单个表中发送响应,没有任何问题。 问题仅在我需要根据restaurantid发送菜单列表时才会出现。

我需要根据restaurantid获取菜单。

以下是我用于从mongodb返回数据的代码。

router.get('/', checkAuth, (req, res, next) => {
    Restaurant.find()
        .exec()
        .then(docs => {
            res.status(200).json({
                count: docs.length,
                restaurants: docs.map(doc => {
                    return {
                        _id: doc._id,
                        restaurantname: doc.restaurantname,
                        menus: ????? <<**This is where i am stuck. Not able to figure out how to write the syntax**>>
                    }
                })
            });
        })
        .catch(err => {
            res.status(500).json({
                error: err
            });
        });
});

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

鉴于MongoDB旨在存储分层文档,其中独立集合之间的关系链接是事后想法,这似乎更像是架构设计问题。菜单属于单个餐厅(因为即使是较大连锁店的个别特许经营店也可能有自己的修改或限制),因此Menus可以更好地作为的{em> <{em> Restaurants }。因为你不需要构建任何东西,所以这里的用例肯定会更容易。如果您确实需要单独查看菜单,您可以始终db.Restaurants.find({...}, {menus: true});来投影该字段。