【发布时间】:2023-03-05 06:51:01
【问题描述】:
我是 Node.js 和 Mongoose 的新手,需要一些帮助。所以我首先创建了一个名为 beerObjects 的数组。然后我向 breweryDB 发出请求并将信息存储在这个数组中。
request(options, function (error, response, body) {
if (error) throw new Error(error);
obj = JSON.parse(body);
data = obj['data'];
for(i = 0; i < data.length; i++) {
var newBeer = new Beer();
newBeer.id = data[i]['id'];
newBeer.name = data[i]['name'];
newBeer.description = data[i]['description'];
newBeer.abv = data[i]['abv'];
if (data[i].hasOwnProperty('labels')) {
newBeer.image = data[i]['labels']['large'];
}
beerObjects.push(newBeer);
console.log(beerObjects[i].name);
}
addBeersToDatabase(beerObjects);
});
我有另一个函数将获取这个数组并将信息存储在我的 mongo 数据库中。
function addBeersToDatabase(beerObjects) {
console.log(beerObjects.length);
for (i = 0; i < beerObjects.length; i++) {
console.log(beerObjects[i].id);
// check if beer is already in database
Beer.count({id: beerObjects[i].id}, function(err, count){
if (err) {
handleError(err);
}
if (count == 0) {
// add new beer to database
var newBeer = new Beer();
newBeer.id = beerObjects[i].id;
newBeer.name = beerObjects[i].name;
newBeer.description = beerObjects[i].description;
newBeer.abv = beerObjects[i].abv;
newBeer.image = beerObjects[i].image;
newBeer.save(function(err) {
if (err) {
throw err;
}
});
}
else {
// beer is already in database
}
});
}
}
在 addBeerToDatabase() 函数的开头,定义了 beerObject,console.log() 语句输出了正确的信息。但是在 Mongoose 函数 Beer.count() 中,我收到了这个错误消息。
newBeer.id = beerObjects[i].id;
TypeError: Cannot read property 'id' of undefined
这个 'id' 是 beerObjects[i] 的 id,而不是 newBeer。如何正确地将 beerObjects 传递给 mongoose 函数并在该函数中使用它?
编辑:
function addBeersToDatabase(beerObjects) {
for (i = 0; i < beerObjects.length; i++) {
console.log(beerObjects[i].beerId);
var currentBeer = beerObjects[i];
// check if beer is already in database
Beer.findOne({'beerId': currentBeer.beerId}, function(err, beer){
if (err) {
handleError(err);
}
if (beer) {
// beer is already in database
}
else {
// add new beer to database
console.log(currentBeer.name);
saveNewBeer(currentBeer);
}
});
}
}
function saveNewBeer(currentBeer) {
var newBeer = new Beer();
newBeer.beerId = currentBeer.beerId;
newBeer.name = currentBeer.name;
newBeer.description = currentBeer.description;
newBeer.abv = currentBeer.abv;
newBeer.image = currentBeer.image;
newBeer.save(function(err) {
if (err) {
throw err;
}
});
}
此代码仅添加 beerObjects 中最后一项的 n 个重复项(其中 n = beerObjects.length)。
【问题讨论】:
-
i变量定义超出范围,您应该在本地执行或将id存储在函数 local var 中:var id = beerObjects[i].id;
标签: javascript node.js mongodb mongoose