无法保存来自猫鼬查询的数据

时间:2021-02-03 04:57:30

标签: node.js express mongoose

当我像这样从数据库记录数据时:

router.get("/names", async (req, res) => {
    ListItemsModel.find({}, function (err, items) {
        items.forEach(item => {
            console.log(item.name);
        });
    });
});

但是 om 试图将它保存到数组中,它返回一个空对象:

router.get("/names", async (req, res) => {
    let listNames = new Array();

    ListItemsModel.find({}, function (err, items) {
        items.forEach(item => {
            listNames.push(item.name);
        });
    });
    console.log(listNames);
});

有人可以提出解决方案吗?

2 个答案:

答案 0 :(得分:1)

ListItemsModel.find 是一个异步调用,因此在 after console.log(listNames); 之后执行。这就是为什么您在该数组中看不到任何内容的原因。

有两种方法可以解决这个问题。

  1. 由于您使用 async 函数来处理路由 async (req, res) => {...,因此您可以轻松地将 await 命令的代码更改为 find。像这样:
router.get("/names", async (req, res) => {
    const lists = await ListItemsModel.find();
    const listNames = lists.map(x => x.name)
    console.log(listNames);
});
  1. 这个非常明显。只需将 console.log(listNames) 移动到回调函数中,您就会得到结果。
router.get("/names", async (req, res) => {
    let listNames = new Array();

    ListItemsModel.find({}, function (err, items) {
        items.forEach(item => {
            listNames.push(item.name);
        });
        console.log(listNames);
    });
});

答案 1 :(得分:0)

你可以使用这样的回调函数:

有你的路由回调函数

row = transform_row(row)

有一个控制器来运行你的模型逻辑

router.get("/names", async (req, res) => {
    let listNames= [];

    getListItems((err,items){

         if(err) console.log(err)
         listNames = items.map((element){ 
               return element.name;
         })
    })
});