>

이러한 질문 중 몇 가지를 보았지만 그 대답은 명확하지 않은 것 같습니다. 퍼그보기에서 자바 스크립트 객체를 반복해야합니다. 퍼그를 처음 사용하면 분명한 내용이 누락 될 수 있습니다.

컨트롤러 :

app.get('/search/:keyword', (req, res) => {
        scraper
        .searchDictionary(req.params.keyword)
        .then(words => {
        res.render('result', console.log(words))
    });
})

다음은 객체를 만드는 실제 기능입니다.

function searchDictionary(searchTerm){
    const url = `https://www.dictionary.com/browse/${searchTerm}?s=t`
    return fetch(`${url}${searchTerm}`)
        .then(response => response.text())
        .then(body => {
        const words = []
        const $ = cheerio.load(body);
        $('ol').each(function(i, element){
            const $element = $(element)
            const $definition = $(element).find('li')
            const word = {
                keyword: searchTerm,
                definition: $definition.text(),
                speechParts: $('span.luna-pos').text(),
                tenses: $('span.luna-inflected-form').text()
            }
            words.push(word);
        });
        return words
    });
}

이제 남은 것은 내 관점에서 객체를 반복하는 것입니다. 나는 겁에 질린 Cannot read property 'length' of undefined 를 계속 받고 . Console.log는 컨트롤러에 올바른 데이터를 표시합니다.

[{ keyword: 'cat',
    definition: 'a person, especially a man.a devotee of jazz.',
    speechParts: 'nounverb (used with object),verb (used without object),Verb PhrasesIdioms',
    tenses: 'cat·ted,cat·ting.cat·ted,cat·ting.' }]

(더 많은 개체가 있으며 예제를 보여주고 싶었습니다)

내 견해는 다음과 같습니다 :

body
h1
    ul
        each word in words
            li= word.keyword

  • 답변 # 1

    문제가 렌더 기능에 있으며, 몇 가지 작은 변경으로 쉽게 해결할 수 있습니다.

    대신에 :

    res.render('result', console.log(words))
    
    

    이 작업을 수행해야합니다 :

    console.log(words);
    res.render('result', {"words": words});
    
    

    console.log  지정된 리턴 유형이 없으므로 로그 기록기로만 사용해야하며 리턴하는 것에 의존하지 않아야합니다. 로그 항목은 별도의 줄에 보관하십시오.

    키가 "words"인 단어 컬렉션이 개체 내에 어떻게 포함되어 있는지 확인하십시오. 변수 이름 words 를 사용하여 퍼그 템플리트가이를 참조하도록 올바르게 설정합니다. .

    템플릿에서 설정 한 각 루프는 좋아 보이고 위의 내용을 변경하면 작동합니다.

    이 단계를 한 단계 더 발전시키기 위해 템플릿에 "오늘의 단어"를 추가하고 싶다고 가정 해 보겠습니다. 렌더링 함수는 다음과 같습니다 :

    res.render('result', {
      "words": words,
      "wordOfTheDay": "lorem"
    });
    
    

    템플릿은 다음과 같습니다.

    h1 Word Of The Day
    p= wordOfTheDay
    br
    h1 Word List
    ul
      each word in words
        li= word.keyword
    
    

관련 자료

  • 이전 javascript - if 문에서 사용하기 위해 동일한 클래스를 가진 두 버튼의 체크 상태를 검색합니까?
  • 다음 ruby on rails - Sidekiq의 perform_in은 실제로는 "사용 중"으로 표시되지만 실제로는 수행하지 않습니다