不能保存猫鼬查询的数据



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

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

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

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);
});

有人能提出解决方案吗?

ListItemsModel.find是一个异步调用,因此在之后执行console.log(listNames);。这就是为什么你在数组中看不到任何东西。

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

  1. 由于您正在使用async函数来处理路由async (req, res) => {...,您可以轻松地将find命令的代码更改为await。这样的:
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);
});
});

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

设置你的路由回调函数

router.get("/names", async (req, res) => {
let listNames= [];
getListItems((err,items){
if(err) console.log(err)
listNames = items.map((element){ 
return element.name;
})
})
});

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

getListItems(callback){
ListItemsModel.find({}, function (err, items) {
if(err){ callback(err,null)}
else{
callback(null,items);
}
});
}

最新更新