简体   繁体   中英

How to pass data from Server to Client in Meteor

I am Learning Meteor and Javascript. I am using an npm package to get meta data of an url on the server side. This works fine. But I get undefined when passing that result back to client. Would appreciate some help.

Here is my code

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;
                    }
                });
            }
        })
    });
}

You need to convert the preview function to an synchronous function,using Future like this, this will make this function wait normal err,data callbacks into a synchronous function.

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();
  }
});

Now this snippet should work

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
        }
    });
};

try using else block to get the meta data. here's a solution of a similar problem . https://forums.meteor.com/t/client-getting-undefined-for-server-method/6129/4?u=faysal

so basically you need to add only one extra line

else{ console.log('metadata  '+ data);}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM