我想从我的 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);
});
},
});
然而,这似乎不起作用。正在客户端进行调用。
这正是 Meteor 方法的用途。
流星方法文档
服务器优先在服务器上定义方法:
Meteor.methods({
// Namespace for clarity
'make.rest_call'(callback) {
HTTP.get('http://www.google.com', {}, (err, data) => {
callback(err, data);
});
}
});
或
如果您需要客户端对数据执行某些操作,请在此处返回承诺(承诺文档(
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');
或
// 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
});
});