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的标记
- 然后在标题中查找
属性对应的urlog:image
//-----------
//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是同步工作的。是的,你完全正确。非常感谢您花时间回答这个问题。