如何在Meteor中将数据从服务器传递到客户端

时间:2015-08-05 11:05:02

标签: javascript meteor

我正在学习流星和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;
                    }
                });
            }
        })
    });
}

2 个答案:

答案 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