我想获取网页的内容,在服务器端进行一些处理(以避免在客户端遇到相同的原始安全问题),然后将结果发送到客户端进行显示。
我编写了一个Meteor方法来帮助获取数据:
Meteor.methods(
{
getURL: function(url_l){
console.log("Request: "+url_l)
// var httpResult = HTTP.get(url_l){}
// return httpResult.data.response;
var response = HTTP.get(url_l)
var status = response.statusCode
var content = response.content
console.log(status)
console.log(content)
return content
}
});
遗憾的是,回报并不起作用。
缺少数据库条目我不能想到将这些数据传递回客户端的方法。我得到了一个未定义的'回来了。
我也尝试过异步回调:
Meteor.methods(
{
getURL: function(url_l){
console.log("Request: "+url_l)
// var httpResult = HTTP.get(url_l){}
// return httpResult.data.response;
var response = HTTP.get(url_l, function(err,res){
if(err)
console.log(err)
var status = res.statusCode
var content = res.content
console.log(status)
console.log(content)
return content
});
}
});
只是澄清问题 - 无论我是否使用同步或异步HTTP回调,当我这样做时:
//AUtofetch
a = Meteor.call("getURL",url_l)
console.log(a)
我得到一个未定义的。
The url they entered is: http://shaunak.de
siteace.js:115 undefined
答案 0 :(得分:1)
您确定在返回请求之前已经完成了请求吗?
通常您必须设置回调到HTTP.get以确保请求已完成:
来自doc:
HTTP.get(url, [callOptions], [asyncCallback])
尝试:
getURL: function(url_l){
console.log("Request: "+url_l)
HTTP.get(url_l, function(err, response){
if(err)
console.log(err);
var status = response.statusCode
var content = response.content
console.log(status)
console.log(content)
return content
});
}
答案 1 :(得分:0)
在答案中建议多次尝试解决此问题之后,我意识到简单地返回整个HTTP Get函数会更容易。
我定义了一个Meteor方法,getUrl将请求url作为参数:
Meteor.methods(
{
'getURL': function(url_l){
console.log("Request: "+url_l)
return HTTP.get(url_l)
}
我使用此调用访问它:
Meteor.call("getURL",url_l,{},function(err,res){
if(err){
console.log('Error: '+err);
}
if(!err){
console.log('Response: '+res);
}
});
这可以避免您在浏览器中成功实现单原始策略所面临的问题。