遇到node / mongoDB

时间:2019-12-30 05:31:10

标签: node.js mongodb express mongoose

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

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

我正在使用带有express的node和带有mongoose的mongoDB。目前,该项目是使用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中查看集合时,它的故事是一样的。默认的项目数组内容不会保存,而且我一生都无法找出原因。

1 个答案:

答案 0 :(得分:1)

那是因为您的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);