我来自 NightmareJS 的 http 响应代码未定义
My http response code from NightmareJS is undefined
您好,欢迎来到 2017 年:)
我正在尝试用 NightmareJS 代替 PhantomJS,到目前为止效果很好(PhantomJS 对我来说执行得非常慢,因此进行了更改)
我的问题是当我尝试 return http 响应 header 时,值未定义。
我查看了文档和许多示例,它们都指向与我的非常相似的代码。
我正在通过将 show 设置为 true 来检查我正在打开的 site/s,所以我知道它们确实打开了
感谢任何帮助,干杯。
我当前的代码如下:
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
将 return 一个状态代码。
我认为这可能是一个错误 - 我已经与开发人员公开了 an issue,我会回复您。
更新
我刚刚收到来自 rosshinkley 的回复,他是 nightmarejs 的最大贡献者:
httpResponse
is not defined because the parameters passed to .then()
will be from the last action executed in the chain (with the exception of .end()
) - in your case, .screenshot()
(which doesn't return anything). If you need the HTTP response, you can break up your chain with another .then()
to perform logic.
原始问题可以用(再次归功于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(); })
您好,欢迎来到 2017 年:)
我正在尝试用 NightmareJS 代替 PhantomJS,到目前为止效果很好(PhantomJS 对我来说执行得非常慢,因此进行了更改)
我的问题是当我尝试 return http 响应 header 时,值未定义。
我查看了文档和许多示例,它们都指向与我的非常相似的代码。
我正在通过将 show 设置为 true 来检查我正在打开的 site/s,所以我知道它们确实打开了
感谢任何帮助,干杯。
我当前的代码如下:
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
将 return 一个状态代码。
我认为这可能是一个错误 - 我已经与开发人员公开了 an issue,我会回复您。
更新
我刚刚收到来自 rosshinkley 的回复,他是 nightmarejs 的最大贡献者:
httpResponse
is not defined because the parameters passed to.then()
will be from the last action executed in the chain (with the exception of.end()
) - in your case,.screenshot()
(which doesn't return anything). If you need the HTTP response, you can break up your chain with another.then()
to perform logic.
原始问题可以用(再次归功于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(); })