我正在尝试根据MeteorJS中路由上的URL参数返回不同的数据。
从nodejs背景,我会这样做:
testPage = function (req, res, next) {
//Got parameter query from url
console.log('Getting at /testPage/:query '+req.params.query);
//do something with that parameter, say make an HTTP call or query database
var newThing = req.params.query+"hi";
// render the page
var data = {
foo: newThing
};
res.render('testPage', data);
};
Meteor不支持服务器端渲染,所以就这样了。我仍然围绕着Meteor的单页客户端渲染;我应该如何在流星中解决这个问题?
我的第一次尝试(使用IronRouter):
Router.route('/testPage/:query', function () {
console.log("Got param at /testPage/:query "+this.params.query);
if(Meteor.isServer){
console.log("This code may never be called?");
//Otherwise, make an HTTP call
// and then somehow pass the data back to the client...
}
this.render("query");
});
这是我能用反应变量做的事吗?或者也许从客户端进行AJAX调用以分离服务器端点?
答案 0 :(得分:1)
使用iron-router的规范模式是使用route参数订阅数据:
this.params.bar
在此示例中,Meteor.subscribe
是路由的唯一参数。它作为参数传递给waitOn
。服务器可以使用该参数来决定要发布回客户端的内容。 {{1}}保证在模板渲染时数据在客户端上可用。
答案 1 :(得分:0)
您可以将.render方法上的数据作为第二个参数传递
Router.route('/testPage/:query', function () {
console.log("Got param at /testPage/:query "+this.params.query);
if(Meteor.isServer){
console.log("This code may never be called?");
//Otherwise, make an HTTP call
// and then somehow pass the data back to the client...
}
this.render("query", {data: queryResult });
});
答案 2 :(得分:0)
从我的观点来看,定义服务器端JSON API端点的最简单的基本方法,没有任何其他附加功能。基于此连接路由。我建议您只需从该处理程序函数中引发Error或Meteor.Error。
此后,您可以附加错误处理中间件,该中间件可以将这些错误转换为JSON并发送响应。