簡體   English   中英

如何在Meteor中將數據從服務器傳遞到客戶端

[英]How to pass data from Server to Client in 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;
                    }
                });
            }
        })
    });
}

您需要將預覽功能轉換為同步功能,使用Future這樣的功能,這將使此功能等待正常的err,數據回調成為同步功能。

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

嘗試使用else塊獲取元數據。 這是類似問題的解決方案。 https://forums.meteor.com/t/client-getting-undefined-for-server-method/6129/4?u=faysal

所以基本上您只需要添加一條額外的行

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM