안녕하세요 & 2017에 오신 것을 환영합니다 :)
나는 PhantomJS 대신 NightmareJS를 시도하고 있으며 지금까지 너무 좋았습니다 (PhantomJS는 나를 위해 매우 느리게 수행되므로 변경됩니다)
내 문제는 http 응답 헤더를 반환하려고 할 때 값이 정의되지 않았다는 것입니다.
나는 문서와 많은 예제를 살펴 보았고 모두 내 것과 매우 유사한 코드를 보여줍니다.
나는 그들이 실제로 열리는 것을 알 수 있도록 show를 true로 설정하여 내가 여는 사이트를 확인하고 있습니다.
도움을 주시면 감사하겠습니다.
내 현재 코드는 다음과 같습니다.
var Nightmare = require('nightmare');
var nightmare = Nightmare({
show: false,
switches: {
'ignore-certificate-errors': true
},
webPreferences:{
images: true
},
//waitTimeout: 1000,
loadTimeout: 30000 //** If we cant reach the page after nnnn millseconds, timeout
});
//** Start nightmare
var ms = Date.now(); //** Set a timer
nightmare
.cookies.clearAll()
.goto(url)
.screenshot('abc123.png')
.end()
.then(function(httpResponse){
console.log(httpResponse.code); //** <<<< Here SHOULD be the http response code
console.log(Date.now() - ms);
callback(siteObject); //
})
.catch(function (error) {
console.error('Search failed:', error);
});
라인 때문에 문제가 발생합니다
.screenshot('abc123.png')
제거하면 httpResponse.code
상태 코드가 반환됩니다.
버그 일 수 있다고 생각 합니다. 개발자 에게 문제 를 제기 했으며 답변을 보내 드리겠습니다.
최신 정보
nightmarejs의 가장 큰 기여자 인 rosshinkley 로부터 답장을 받았습니다 .
httpResponse
전달 된 매개 변수.then()
가 체인에서 실행 된 마지막 작업 (예외 제외.end()
) 에서 온 것이기 때문에 정의되지 않았습니다 -귀하의 경우.screenshot()
(아무것도 반환하지 않음). HTTP 응답이 필요한 경우 다른.then()
것과 체인 을 분리하여 논리를 수행 할 수 있습니다 .
원래 질문은 다음과 같이 수정할 수 있습니다 (다시 rosshinkley에 대한 크레딧 ).
nightmare.goto(url)
.then(function(httpResponse) {
if(httpResponse.code == 200) {
return nightmare.screenshot('abc123.png');
}
else {
//error condition?
throw new Error('http response was not ok');
}
})
.then(function(){ return nightmare.end(); })
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다