首页 > 解决方案 > 节点/mongoDB 遇到问题

问题描述

如果已经有一个线程可以解决我的问题,但我找不到它,请原谅我。

我对 Web 开发还很陌生,目前正在研究 udemy 的全栈开发人员课程之一的课程材料。

我将 node 与 express 和 mongoDB 与 mongoose 一起使用。目前,该项目是用 mongoDB 升级我们在课程前面构建的一个预先存在的待办事项应用程序(大惊喜吧?)。

一切都很好,直到我似乎无法重现讲师的结果。

问题是当我尝试使用快速路由参数来动态生成新列表(以及新的数据库集合)时。

const listItemsSchema = new mongoose.Schema({
  name: String
});

//create collection
const ListItem = mongoose.model("ListItem", listItemsSchema);

const item1 = new ListItem({
  name: "item1"
});
const item2 = new ListItem({
  name: "item2"
});
const item3 = new ListItem({
  name: "item3"
});

const defaultItems = [item1, item2, item3];

const listSchema = new mongoose.Schema({
  name: String,
  items: [listItemsSchema]
});

const List = mongoose.model("List", listSchema);

  app.get("/:listName", (req, res) => {
  const newListName = req.params.listName;

  console.log(newListName);  //logs new list name correctly
  console.log(defaultItems); //logs default items array correctly

  const newList = new List({
    name: newListName,
    list: defaultItems
  });

  newList.save();
  console.log(newList); // logs the name field correctly, however, logs the items array as empty

});

当我查看 mongo shell 中的集合时,它是同样的故事。默认项目数组内容未保存,我一生都无法弄清楚原因。

标签: node.jsmongodbexpressmongoose

解决方案


那是因为您的listSchema定义具有属性items,但您正在使用属性对其进行实例化list
更改您的代码如下:

  const newList = new List({
    name: newListName,
    items: defaultItems
  });

另请注意,这newList.save()是一个异步操作,您必须等待它被解决。

newList.save()
  .then((result) => {
    console.log(result);
  }

或在异步函数中:

const result = await newList.save();
console.log(result);

推荐阅读