流星提取没有收集的服务器端作业

时间:2017-06-29 18:13:44

标签: rest meteor

我想从我的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);
        });
    },
});

然而,这似乎不起作用。呼叫正在客户端进行。

1 个答案:

答案 0 :(得分:1)

这正是Meteor方法的用途。

Meteor methods docs

服务器 首先在服务器上定义您的方法:

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
    });
});