2012-10-31 4 views
9

node.js를 배우려면 mongoDB에 저장된 일부 rss 피드를 가져 와서 처리하고 작은 피드를 만든 다음 날짜순으로 단일 피드를 만드십시오.빠른 요청이 두 번 호출되었습니다.

~ 1000 개의 블로그 항목으로 ~ 50 개의 RSS 피드 목록을 파싱하므로 전체 내용을 파싱하는 데 꽤 길기 때문에 다음 피드를 가져 와서 모든 피드를 가져오고 파싱하려면 충분한 시간이 필요합니다.

모든 것이 잘 실행되지만 요청은 두 번 호출됩니다. (나는 wireshark로 확인했다, 나는 그것이 여기 favicon에 관하여다는 것을 생각하지 않는다).

나는 정말로 그것을 얻지 못한다.

여기에서 직접 시험해 볼 수 있습니다 : http://mighty-springs-9162.herokuapp.com/feed/mde/20 ("mde"에 대한 최근 20 개 기사가있는 RSS 피드를 만들어야합니다). https://github.com/xseignard/rss-unify

그리고 우리는 흥미로운 비트에 초점을 맞출 경우 :

코드는 여기에

나는 경로는 다음과 같이 정의 :

: app.get('/feed/:name/:size?', topics.getFeed);

그리고 topics.getFeed이 같다

function getFeed(req, res) { 
    // 1 minute timeout to get enough time for the request to be processed 
    req.connection.setTimeout(60*1000); 

    var name = req.params.name; 
    var callback = function(err, topic) { 
    // if the topic has been found 
    if (topic) { 
    // aggregate the corresponding feeds 
    rssAggregator.aggregate(topic, function(err, rssFeed) { 
     if (err) { 
     res.status(500).send({error: 'Error while creating feed'}); 
     } 
     else { 
     res.send(rssFeed); 
     } 
    }, 
    req); 
    } 
    else { 
    res.status(404).send({error: 'Topic not found'}); 
    }}; 
    // look for the topic in the db 
    findTopicByName(name, callback); 
} 

아무 것도 없지만 여전히이 getFeed 함수는 두 번 호출됩니다.

무엇이 잘못 되었나요? 어떤 생각?

+0

가장 일반적인 문제는 어딘가에 사용하는 것을 잊었다입니다 'return' –

+0

안녕하세요 mvbl이-FST, 난 당신이'''return'''을 잊고 무엇을 의미하지 않습니다. 더 설명해 주시겠습니까? –

+0

위와 관련해서는 잘못된 것일 수 있습니다.이 코드에서는 아무 것도 두 번 실행하지 않습니다 (favicon.ico는 제외하지만 질문이 없다고 말했음). 내가 할 수있는 유일한 방법은 return findTopicByName (name, callback);'입니다. 그러나 그것이 도움이되지 않을 것이라고 확신합니다. –

답변

9

오랫동안 나를 괴롭혔다. Firebug 확장은 백그라운드에서 각 GET 요청의 사본을 전송할 가능성이 큽니다. Firebug를 꺼서 문제가 아닌지 확인하십시오.

+0

내 경우에도 이것이 문제였습니다. http : // localhost : 3000/tracks에 대한 GET 요청이 한 번 호출되었으며 http : // localhost : 3000/tracks/post에 대한 GET 요청이 두 번 호출되었습니다. Firebug (Chrome에서)를 사용 중지했을 때 두 번째 요청이 한 번 호출되었습니다. –

+0

이것은 나에게도 일어 났지만 chrome dev 툴로 발생했습니다. 나는 이유를 알아 내려고 노력하면서 내 머리카락을 꺼내려고했다. – Jeffpowrs

+0

나는 동일한 문제가 있으며 확실히 방화범이 아닙니다. 필자의 경우 요청 응답 시간과 관련이 있습니다. 두 번 호출 된 요청이 많은 컴퓨팅을 수행하고 3-4 분 후에 응답을 보내기 때문입니다. 그리고 아무런 계산없이 빠르게 반응한다면 두 번째 요청은 발생하지 않습니다. – user619271

1

더 많은 시간을 늘려야 할 수도 있습니다. 나는 익스프레스 소스를 보지 못했지만 타임 아웃시에만 소리가납니다. 재 시도합니다.

2

사이트에 favicon이있는 경우 제거하고 다시 시도하십시오. 문제가 해결되면 favicon url을

0

같은 문제가 발생했습니다. 그런 다음 반환을 추가하려고 시도했지만 작동하지 않았습니다. 하지만 return res.redirect ('/ path')를 추가하면 작동합니다.

2

나는 지금 거의 같은 일을하고 있으며 똑같은 것으로 나타났습니다.

나는이 같은 크롬의 API 주소를 입력하여 내 서버를 테스트하고 있습니다 :

http://127.0.0.1:1337/links/1

내 Node.js를 서버에 다음 ID에 따라 JSON 객체로 응답한다.

get 메소드에서 콘솔 로그를 설정하고 크롬의 주소 표시 줄에서 id를 변경하면 요청을 보냅니다 (실제로 요청을 보내기 위해 enter를 누르기 전에). 그리고 서버는 다른 요청을 받아들입니다. 실제로 Enter를 누르십시오. 크롬 데브 콘솔을 열어 두었거나하지 않고 이런 일이 발생합니다.

IE 11은 같은 방식으로 작동하지 않는 것 같지만 Firefox를 지금 설치하지 않았습니다.이 오래된 스레드 :

/J의 일종 경우에도 사람을 도움이

희망

나는 그것이 해결 아야과 관련이있다 생각 익스프레스 (4)와 함께이 일을 동일한 문제가 있었다
0

매개 변수를 요청하십시오. 해결책은 paramsif 블록에서 확인하는 등의 방법으로 해결되는지 확인하는 것입니다.

app.get('/:conversation',(req, res) => { 
    let url = req.params.conversation; 

//Only handle request when params have resolved 
    if(url){ 
res.redirect(301, 'http://'+ url + '.com') 
    } 

}) 
관련 문제