我想从我的Meteor客户端向服务器提交请求,该服务器向服务器发出HTTP请求,然后将响应返回给客户端。
在REST Web服务器上,我会从客户端向服务器发出HTTP GET
,然后服务器会发出自己的请求并响应客户端。
我还没有为我的Meteor应用添加REST界面,并且不想为这个需求添加这些开销。但是,使用集合来完成这项工作是不合适的,而不是正确的工具。
有没有办法让Meteor客户端安全地要求服务器做某事并在不使用集合的情况下获得响应?我搞乱流星的方法,如:
Meteor.methods({
'/http/get'(name, cbk) {
cbk = cbk || function() {};
HTTP.get('http://www.google.com', {}, (err, data) => {
cbk(err, data);
});
},
});
然而,这似乎不起作用。呼叫正在客户端进行。
答案 0 :(得分:1)
这正是Meteor方法的用途。
服务器强> 首先在服务器上定义您的方法:
Meteor.methods({
// Namespace for clarity
'make.rest_call'(callback) {
HTTP.get('http://www.google.com', {}, (err, data) => {
callback(err, data);
});
}
});
OR
如果您需要客户端对数据执行某些操作,请在此处返回承诺(promise docs)
Meteor.methods({
// Namespace for clarity
'make.rest_call'(callback) {
return new Promise((resolve, reject) => {
HTTP.get('http://www.google.com', {}, (err, data) => {
if (err) { reject(err); }
resolve(data);
});
}
}
});
<强>客户端强> 然后从您的客户端调用它:
// Simple call (just makes the call, does nothing on the client)
Meteor.call('make.rest_call');
OR
// Promise based call
Meteor.call('make.rest_call', (error, result) => {
if (error) { /* do something with error */ }
// result contains your promise.
result.then((data) => {
// do something with returned data
});
});