我正在创建一个小API来监控我的某些网站的性能。为此,我想要加载时间和http状态代码。我使用节点js和phatomjs来做到这一点,到目前为止我的加载时间恰到好处,但我似乎无法获得状态代码。我尝试了一些不同的东西,但到目前为止都没有。
这是我现在的代码:
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.type('application/json');
res.send('{"status": "running"}');
});
app.get('/site/:url', function(req, res){
res.type('application/json');
res.header('Access-Control-Allow-Origin', '*');
res.header('Cache-Control', 'no-cache');
var url = decodeURIComponent(req.param('url'));
var phantom = require('phantom');
var time, code;
phantom.create(function(ph){
ph.createPage(function(page){
time = Date.now();
page.open(url, function(status){
time = Date.now() - time;
res.send({"status": status, "time": time});
});
});
});
});
var server = app.listen(80, function() {
var host = server.address().address;
var port = server.address().port;
console.log('Got\'cha .. ', host, port);
});
我已经尝试了http://phantomjs.org/api/webpage/handler/on-resource-received.html,但我似乎无法看到我可以调用它的位置,因此我可以将其与其他数据一起返回。到目前为止,我得到了类似{"status":"success","time":1723}
的内容。
有人知道我能做些什么吗?
答案 0 :(得分:2)
你是对的,onResourceReceived
提供了实际的状态代码。如functionality details所示,您必须使用page.set
设置事件处理程序。
您可以假设onResourceReceived
在页面open
回调之前执行:
var statusCode = null;
page.set('onResourceReceived', function(resource){
statusCode = resource.status;
});
page.open(url, function(status){
time = Date.now() - time;
res.send({"status": statusCode, "time": time});
});
如果您无法确定(您应该进行一些测试),那么您可以使用waitFor
from here之类的内容:
var statusCode = null;
page.set('onResourceReceived', function(resource){
statusCode = resource.status;
});
page.open(url, function(status){
waitFor(function(){
return !!statusCode;
}, function(){
time = Date.now() - time;
res.send({"status": statusCode, "time": time});
});
});