Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Rest Meteor fetch服务器端作业(不带收集)_Rest_Meteor - Fatal编程技术网

Rest Meteor fetch服务器端作业(不带收集)

Rest Meteor fetch服务器端作业(不带收集),rest,meteor,Rest,Meteor,我想从Meteor客户端向服务器提交一个请求,让服务器向网站发出HTTP请求,然后将响应返回给客户端 在RESTWeb服务器上,我将从客户端向服务器发送一个HTTPGET,然后服务器将发出自己的请求并响应客户端 我还没有在我的Meteor应用程序中添加REST接口,也不想只为这一个需求添加此开销。然而,使用集合来完成这项工作并不合适,也不是正确的工具 Meteor客户端是否有任何方法可以安全地要求服务器执行某些操作并在不使用集合的情况下获得响应?我正在使用流星方法,例如: Meteor.meth

我想从Meteor客户端向服务器提交一个请求,让服务器向网站发出HTTP请求,然后将响应返回给客户端

在RESTWeb服务器上,我将从客户端向服务器发送一个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);
        });
    }
});

如果您需要客户机处理数据,请在此处返回承诺()

客户端 然后从你的客户那里打电话:

// Simple call (just makes the call, does nothing on the client)
Meteor.call('make.rest_call');


谢谢但是,当我尝试这样做时,客户机和服务器都会尝试发出HTTP请求,并得到一个CORS错误。如何使服务器尝试发出HTTP请求,然后将其返回到客户端?目前,我通过向HTTP请求添加一个try/catch来实现这一点,但这似乎很关键。除非查询的源具有特殊的头,否则无法从现代web客户端发出跨源请求。这并不总是可能或可行的,这就是为什么我们只需要从服务器进行此调用。我已经准确地标记了每一段代码的去向,这应该会使它更容易理解。哦,所以我从来没有在客户机上定义过这个方法?我一直在客户机和服务器加载的文件中定义我的方法。我认为这是必需的。这就解释了为什么它要执行两次;)。从这里开始应该是下坡路了。
// 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
    });
});