2017-01-01 3 views
1

Привет & Добро пожаловать +2017 :)Мой код ответа HTTP от NightmareJS неопределен

Я пытаюсь из NightmareJS вместо PhantomJS и до сих пор так хорошо (PhantomJS выполняет очень медленно для меня, следовательно, изменение)

Моя проблема в том, когда я пытаюсь вернуть заголовок ответа http, значение не определено.

Я просмотрел документы и множество примеров, и все они показывают очень похожий код на мой.

Я проверяю на сайте/с Я открываю, установив шоу верно, так что я знаю, что они на самом деле открыты

Любая помощь приветствуется, веселит.

Мой текущий код ниже:

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); 
}); 
+0

Я не отработаны все детали, но если вы удалите .screenshot ('abc123.png ') он возвращает правильный ответ на состояние – Daniel

+0

Приветствует Дэниела, который работает. . Существует небольшая проблема скриншоте не оказывающую :( – TheTechy

ответ

0

Проблема происходит из-за линии

.screenshot('abc123.png') 

Если вы удалите его, затем httpResponse.code возвращает код состояния.

Я считаю, что это может быть ошибка - я открыл an issue с разработчиками, и я вернусь к вам с ответом.

Update

Я только что получил ответ от rosshinkley, который вносит наибольший вклад в nightmarejs:

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(); }) 
+0

Excellent благодаря Версия: «кошмар»: «^ 2.9.0» версии узла: 6.9.1 – TheTechy

+0

Я добавил ответ @TheTechy – Daniel

+0

Спасибо Daniel, я просто смотрю на это. я сейчас попробовал, что и код работает. Я регулировать свою голову, чтобы вспомнить кошмар thenable так просто нужно помнить, чтобы вернуть все данные, необходимые для последующего, то это Еще раз спасибо вам & Ross – TheTechy

Смежные вопросы