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

home2 게시판 Node.js, Express 게시판 Cannot read property 'length' of undefined 에러

Cannot read property 'length' of undefined 에러

6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 글쓴이
  • #20493

    장준혁
    참가자

    선생님 검색기능에서 에러가 났어요. 주석 처리된 부분은 잘 되지만 검색 조건을 추가하면 Cannot read property 'length' of undefined라고 에러가 떠요. search index를 cdataindex로 바꿨고, 컬랙션에 있는 쿼리의 이름을 검색할려합니다. 스크래핑해온 자료들을 csv로 변환해서 db에 넣는과정에서 counter에 대한 검색 조건도 삭제했습니다. 
    <strong>server.js</strong>

    app.get("/search", (요청, 응답) => {
      var 검색조건 = [
        {
          $search: {
            index: "cdataindex",
            text: {
              query: 요청.query.value,
              path: '이름'
            },
          },
        }
      ];

      console.log(요청.query);
      db.collection("cdata")
      .aggregate(검색조건)
      .toArray((에러, 결과) => {

          console.log(결과);
          응답.render("search.ejs", { posts: 결과 });
        });
    });

    // app.get("/search", (res, req) => {
    //   console.log(res.query.value);
    //   db.collection("cdata")
    //     .find({ 이름: res.query.value })
    //     .toArray((err, result) => {
    //       console.log(result);

    //       req.render("search.ejs", { posts: result });
    //     });
    // });
    <h5><strong>search.ejs</strong></h5>
        <div class="container input-group mb-2">
            <input class="form-control" id="search-input">
            <button class="input-group-append btn btn-danger"
            id="search">검색</button>
        </div>

        <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

        <script>
            $('#search').click(function(){
                var result = $('#search-input').val()
                window.location.replace('/search?value=' + result)
            })

        </script>

            <ul class="list-group">
            <% for (var i=0; i < posts.length; i++){ %>
                <li class="list-group-item">
                    <h4> 이름 : <%= posts[i].이름 %>
                    </h4>
                    <p> 뜻 : <%= posts[i].뜻 %> </p>
                </li>
                <% } %>
        </ul>

    error

    TypeError: C:\Users\Admin\Documents\HACKATHON\views\search.ejs:41
    39|
    40| <ul class="list-group">
    >> 41| <% for (var i=0; i < posts.length; i++){ %>
    42| <li class="list-group-item">
    43| <h4> 이름 : <%= posts[i].이름 %>
    44| </h4>

    Cannot read property 'length' of undefined

    그리고 검색조건에 자동완성 기능을 추가하고 싶은데 어떻게 하면 구현할 수 있을까요?

    #20494

    장준혁
    참가자

    에러는 해결했습니다. 그러나 자동완성 기능을 어떤식으로 구현하는게 가장 효율적일까요?

    #20501

    codingapple
    키 마스터

    {
    $search: {
      autocomplete: {
        path: "post",
        query: "입력한검색어"
      },
    },
    },

    aggregate() 안에 autocomplete 옵션넣으면 검색어 자동완성에 필요한 데이터 가져다줍니다 

    #20503

    장준혁
    참가자

    한글말고 영어로 자동완성을 하고싶은데
    app.get("/search", (요청, 응답) => {
      var 검색조건 = [
        {
          $search: {
            index: "cdataindex",
            autocomplete: {
              query: 요청.query.value,
              path: "이름",
              // 제목날짜 둘다 찾고 싶으면 ['제목', '날짜']
            },
          },
        },
        { $sort: { _id: 1 } },
        { $limit: 10 },
        { $project: { 제목: 1, _id: 0 } },
      ];
    여기서 무엇을 더 바꾸면 되나요?

    #20504

    장준혁
    참가자

    해결했습니다. 감사합니다

    #109257

    최원호
    참가자
    장준혁씨, 저도 같은 에러가 났는데 해결을 못하고 있습니다. 어떻게 해결했나요?
6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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