-
글쓴이글
-
2021년 11월 19일 16:50 #20193
wyk참가자app.get("/main", function (req, res) {
db.collection("loadcell_col")
.find()
.toArray(function (err, result) {
console.log(err);
console.log(result);
res.render("index.ejs", { data: result });
});현재 이런식으로 ejs에 data라는 변수로 loadcell_col이라는 collection의 값들을 불러올 수 있는데,
한 페이지에서 또 다른 collection들을 불러오고 싶은데 어떻게 해야하는 지 여쭤보고 싶습니다.
ex(
app.get("/main", function (req, res) {
db.collection("loadcell_col")
.find()
.toArray(function (err, result) {
console.log(err);
console.log(result);
res.render("index.ejs", { data1: result });db.collection("temp_col")
.find()
.toArray(function (err, result) {
console.log(err);
console.log(result);
res.render("index.ejs", { data2: result });
});)
위 방식으로 진행했을때 결국 마지막 줄에 있는 data2만 반영되고 위에 찾은 loadcell data값은 undefined라고 나옵니다.
3일간 구글링 했지만 더 이상 방법을 찾을 수 없어 질문 드립니다.
2021년 11월 19일 18:27 #20196
codingapple키 마스터res.어쩌구 응답은 1번만 할 수 있습니다
loadcell_col에서 데이터가져와주세요 그게 성공하면
temp_col 에서 데이터 가져와주세요 그게 성공하면
res.render("index.ejs", { data1: result1, data2 : result2 });
이렇게 코드짜면 될듯요
2021년 11월 23일 12:41 #20438
wyk참가자app.get("/main", function (req, res) {
let promise1 = new Promise(function (resolve, reject) {
db.collection("loadcell_col")
.find()
.toArray(function (err, result1) {
console.log(err);
console.log(result1);
resolve(result1);
});
});
promise1
.then(function (result1) {
new Promise(function (resolve, reject) {
db.collection("temp_col")
.find()
.toArray(function (err, result2) {
console.log(err);
console.log(result1, result2);
resolve(result1, result2);
});
});
})
.then(function (result1, result2) {
res.render("index.ejs", { data1: result1, data2: result2 });
resolve();
});
});선생님께서 알려주신대로 코드를 작성하였습니다.
ejs페이지에, data1이나 data2를 출력하지 않으면 랜더링이 잘 되는데,
ejs 페이지에 data1[0] 를 출력하려고 하면,
Cannot read property '0' of undefined 이런 에러와 함께 ejs페이지가 렌더링이 안되고 있는데, 어떤 부분이 잘못 된지 잘 모르겠어서 질문 드립니다.
2021년 11월 23일 13:04 #20440
wyk참가자app.get("/main", function (req, res) {
let promise1 = new Promise(function (resolve, reject) {
db.collection("loadcell_col")
.find()
.toArray(function (err, result1) {
console.log(err);
console.log(result1);
resolve(result1);
});
});
promise1
.then(function (result1) {
return new Promise(function (resolve, reject) {
db.collection("temp_col")
.find()
.toArray(function (err, result2) {
console.log(err);
resolve(result1, result2);
});
});
})
.then(function (result1, result2) {
res.render("index.ejs", { data1: result1, data2: result2 });
});
});이렇게 수정하여 data1 은 출력이 가능한데, data2 출력이 안되는거 같습니다. data2도 출력 하려면 .then(function (result1, result2)를 어떻게 고쳐야 할까요?
2021년 11월 23일 15:48 #20457
codingapple키 마스터result1과 2를 하나의 [] 아니면 {} 안에 넣으면 됩니다
근데 promise직접 만들 필요 없이 .find().toArray() 이런거 쓰면 그 자리에 promise가 남아서 .find().toArray().then() 하시면 됩니다
2021년 12월 8일 15:03 #21513
wyk참가자app.get("/write", function (req, res) {
db.collection("post")
.find()
.toArray()
.then(
db
.collection("post")
.find()
.toArray(function (err, result2) {
console.log(result2);
res.render("write.ejs", { data1: result2 });
})
);
});선생님께서 말씀하신대로, promise를 새로 만들지 않고, .then으로 제작하였더니, 위 코드 4번째 줄에 있는 .toArray()함수에서
array에 담긴 result를 찾지 못하는 상황이 발생하여 ,
app.get("/write", function (req, res) {
db.collection("post")
.find()
.toArray(function (err, result1) {
console.log(result1);
})
.then(
db
.collection("post")
.find()
.toArray(function (err, result2) {
console.log(result2);
res.render("write.ejs", { data1: result1, data2: result2 });
})
);
});이렇게 적었더니, TypeError: Cannot read property 'then' of undefined
이라는 에러문구를 받았습니다. 오랜 시간 구글링과 고민해 보았지만, 선생님이 알려주신 array를 만들어 담아서 promise 형태로 넘기는
app.get("/home", function (req, res) {
let all = [];let promise1 = new Promise(function (resolve, reject) {
db.collection("post")
.find()
.toArray(function (err, result1) {
// console.log(err);
// console.log(result1);
resolve(result1);
});
});
promise1
.then(function (result1) {
return new Promise(function (resolve, reject) {
db.collection("post2")
.find()
.toArray(function (err, result2) {
console.log(err);all.push(result1);
all.push(result2);
resolve(all);
});
});
})
.then(function (all) {
// console.log(all);
res.render("home.ejs", { posts: all });
});
});이 방법 외에는 다른 방법을 찾을 수 없어 질문 남깁니다.
Q1 .then을 사용하게 된다면 첫번째로 toArray()를 사용하여 찾은 result들의 행방과 어떻게 하면 .then( ) 으로 보낼 수 있는지에 대해 여쭤봅니다.
2021년 12월 8일 15:34 #21532
codingapple키 마스터db.collection().find().toArray().then(function(결과1){
db.collection().find().toArray().then(function(결과2){
res.render("home.ejs", { posts: [결과1, 결과2] });
});
})
.then안에는 콜백함수 넣어야합니다
-
글쓴이글
- 답변은 로그인 후 가능합니다.