그냥 node.js로 놀기 시작 했으므로 JavaScript로 경험 한 적이 있지만 서버 측에서는 거의 경험하지 못했습니다.Node.js + Mongoose ... 제어 흐름 문제?
나는 다음과 같은 코드를 가지고 있으며 찾고자하는 기능이 Mongoose를 사용하여 컬렉션에 제품을 추가하는 것입니다. 그러나 'name'을 사용하여 복제본을 찾으면 제품을 포함 된 문서로 푸시합니다. duplicate는 product_ids, package info 등과 같은 선택 정보 만 가지고 있습니다. 문제는 findOne이 첫 번째 실행에서 중복 된 것을 찾지 못한다고 가정합니다. 두 번째로 실행하면 중복을 감지하지만 너무 늦었습니다. 이전 'save'가 발생한 후에 만 findOne을 실행하는 방법을 모르겠습니다.
function insertProduct(data) {
var product;
Product.findOne({
name: data.name
}, function(err, doc) {
if (err) throw err;
if (!doc) {
product = new Product({
name: data.name
//other product data
});
product.packages.push({
//package data
});
}
else if (doc) {
doc.packages.push({
//package data
});
product = doc;
}
product.save(function(err) {
if (err) throw err;
console.log('Added: ' + product.name);
});
});
}
request(url, function(error, response, body) {
if (!error && response.statusCode === 200) {
jsonResult = JSON.parse(body);
jsonResult.result.forEach(insertProduct);
}
});
제어 흐름에 문제가 있다는 것을 깨달았습니다. 아직 보류 중입니다. 귀하의 도움을 주시면 감사하겠습니다!
분명히 더 논리적 인 방법이지만, 트릭을 수행하지 않습니다. Product.findOne은 앱을 두 번째로 실행했을 때만 복제본을 찾습니다. 첫 번째 실행에서는 빈 컬렉션에서 시작하여 어떤 이유로 새로 작성된 문서가 표시되지 않으므로 중복 된 문서를 찾을 수 없습니다. 다른 아이디어? 다시 한 번 감사드립니다! – dnglbr