• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 mongodb atlas 콜렉션 연결

mongodb atlas 콜렉션 연결

  • 이 주제에는 7개 답변, 2명 참여가 있으며 wyk3 년, 7 월 전에 전에 마지막으로 업데이트했습니다.
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
  • 글쓴이
  • #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일간 구글링 했지만 더 이상 방법을 찾을 수 없어 질문 드립니다.

    #20196

    codingapple
    키 마스터

    res.어쩌구 응답은 1번만 할 수 있습니다 

    loadcell_col에서 데이터가져와주세요 그게 성공하면 

      temp_col 에서 데이터 가져와주세요 그게 성공하면 

        res.render("index.ejs", { data1: result1, data2 : result2 });

    이렇게 코드짜면 될듯요 

    #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페이지가 렌더링이 안되고 있는데, 어떤 부분이 잘못 된지 잘 모르겠어서 질문 드립니다.

     

    #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)를 어떻게 고쳐야 할까요?

    #20457

    codingapple
    키 마스터

    result1과 2를 하나의 [] 아니면 {} 안에 넣으면 됩니다

    근데 promise직접 만들 필요 없이 .find().toArray() 이런거 쓰면 그 자리에 promise가 남아서 .find().toArray().then() 하시면 됩니다

    #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( ) 으로 보낼 수 있는지에 대해 여쭤봅니다.

    #21532

    codingapple
    키 마스터

    db.collection().find().toArray().then(function(결과1){

      db.collection().find().toArray().then(function(결과2){

        res.render("home.ejs", { posts: [결과1, 결과2] });

      });

    })

    .then안에는 콜백함수 넣어야합니다

    #21941

    wyk
    참가자

    감사합니다 선생님 선생님 덕분에 완성했습니다!

8 글 보임 - 1 에서 8 까지 (총 8 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠