Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Js:在模板中使用异步Meteor方法_Javascript_Asynchronous_Meteor - Fatal编程技术网

Javascript Js:在模板中使用异步Meteor方法

Javascript Js:在模板中使用异步Meteor方法,javascript,asynchronous,meteor,Javascript,Asynchronous,Meteor,我不知所措 我试图达到的目标如下: 从客户端向服务器传递url 在服务器上,发出HTTP请求以获取所述url的标记 然后在标题中查找og:image属性对应的url 我可以在服务器和控制台上找到我要查找的属性。log它,但我很难将它传递给客户端,然后再传递给视图。谁能告诉我我做错了什么 //----------- //Client code //----------- Template.postShow.helpers({ postImage: (url) -> Mete

我不知所措

我试图达到的目标如下:

  • 从客户端向服务器传递url
  • 在服务器上,发出HTTP请求以获取所述url的标记
  • 然后在标题中查找
    og:image
    属性对应的url
我可以在服务器和控制台上找到我要查找的属性。log它,但我很难将它传递给客户端,然后再传递给视图。谁能告诉我我做错了什么

//-----------
//Client code
//-----------

Template.postShow.helpers({
  postImage: (url) ->
    Meteor.call "getRemoteImage", url, (err, result) ->
      if err
        // logs nothing
        console.log err
      else
        // logs nothing
        console.log result
        // sets nothing
        Session.set "myData", result
  theImage: () ->
    return Session.get "myData"
})


//------------
//Server Code:
//------------

function getArticleImage(url, callback){
  return Meteor.http.get(url, function(err, data){
        if (err){
          return err
        }
        else{

          $ = cheerio.load(data.content)
          imgURL = $("meta[property='og:image']").attr('content')
          //logs what I'm looking for
          console.log("server: ", imgURL)
          return imgURL
        }
      })
}

var getArticleImageSync = Meteor.wrapAsync(getArticleImage)

Meteor.methods({
  getRemoteImage: function(url){
    var result = getArticleImageSync(url)
    return result
  }
})


//--------------
// Template Code
//--------------

 <template name="postShow">
  <!-- the postImage function doesnt put anything in the view on it's own. it works in concert with the theImage function -->

  {{postImage url}}
  <p>{{theImage}}</p>

</template>
//-----------
//客户端代码
//-----------
Template.postShow.helpers({
postImage:(url)->
Meteor.call“getRemoteImage”,url,(错误,结果)->
如果出错
//什么都不记录
console.log错误
其他的
//什么都不记录
console.log结果
//一事无成
Session.set“myData”,结果
图片:()->
返回会话。获取“myData”
})
//------------
//服务器代码:
//------------
函数getArticleImage(url,回调){
return Meteor.http.get(url、函数(err、数据){
如果(错误){
返回错误
}
否则{
$=cheerio.load(data.content)
imgURL=$(“meta[property='og:image']”)attr('content'))
//记录我要找的东西
log(“服务器:”,imgURL)
返回图
}
})
}
var getArticleImageSync=Meteor.wrapAsync(getArticleImage)
流星法({
getRemoteImage:函数(url){
var result=getArticleImageSync(url)
返回结果
}
})
//--------------
//模板代码
//--------------
{{postImage url}}
{{theImage}}


你在哪里看过Meteor.http.get?它可能来自一个非常古老的教程,因为那是一个过时的API。我不建议阅读2014年下半年之前编写的任何流星教程。你不需要做所有的异步工作——在服务器上Meteor的
HTTP
API是同步工作的。是的,你完全正确。非常感谢您花时间回答这个问题。