我正在学习流星和Javascript。我正在使用npm包来获取服务器端url的元数据。这很好用。但是当将结果传递回客户端时,我得到了未定义。希望得到一些帮助。
这是我的代码
if (Meteor.isClient) {
Meteor.call('getMetaData', "http://www.bbc.co.uk/news", function (err, data) {
if (err) {
console.log("error", err);
};
console.log("Meta data: " + data); //shows undefined
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
var preview = Meteor.npmRequire('page-previewer');
Meteor.methods({
getMetaData: function (url) {
preview(url, function (err, data) {
if (!err) {
console.log(data); //Works fine
return data;
}
});
}
})
});
}
答案 0 :(得分:3)
您需要将预览功能转换为同步功能,使用Future这样,这将使此函数等待正常错误,数据回调为同步函数。
var Future = Npm.require('fibers/future'),
preview = Meteor.npmRequire('page-previewer');
Meteor.methods({
getMetaData: function(url) {
var f = new Future();
preview(url, function(err, data) {
if (!err) {
return f.return(data);
}
});
return f.wait();
}
});
现在这个代码段应该可以正常工作
if (Meteor.isClient) {
Meteor.call('getMetaData', "http://www.bbc.co.uk/news", function (err, data) {
if (err) {
console.log("error", err);
}else{
console.log("Meta data: " + data); //shows undefined
}
});
};
答案 1 :(得分:-1)
尝试使用user_agent
块来获取元数据。这是类似问题的解决方案。
https://forums.meteor.com/t/client-getting-undefined-for-server-method/6129/4?u=faysal
所以基本上你只需要添加一个额外的行
else