Meteor 如何请求外部资源?

How do request to external resource in Meteor?

我需要从外部服务获取数据。它有 API。这是例子: http://portal.example.com/portal.api?l=username&p=keyphrase&act=brand_by_nr&nr=kl2&alt

参数为: "l" - 登录名,"p" - 密码,"act" - 要执行的函数,"nr" - 部件号

我尝试通过 Meteor 连接 http.This 是我的服务器代码:

var sources = {
    mskv: {
        url: "http://portal.example.com/portal.api",
        auth: { l: "mylogin", p: "cBKoTyalCgbOQb37NG6sbb0qv2I0Q4PmWRJIJMWpOhCPFombqeDv7fBhdkjsdhkjah" },
        params: { act: "brand_by_nr", nr: null }
    }
};


Meteor.methods({
    doRequest: function(partNumber) {
        for (var key in sources) {
            var url = sources[key].url;
            var authData = sources[key].auth;
            var paramsData = sources[key].params;

            paramsData.nr = partNumber;

            HTTP.call("POST", url, { auth: authData, params: paramsData }, function(err, res) {
                if (err) {
                    throw new Meteor.Error("not-response", "Remote server not responding");
                }
               
                return res;
            });
        }
    }
});

这是我的客户端代码:

Template.search.events({
    "click .search": function(event) {
        var partNumber = document.getElementsByClassName("input")[0].value;

        Meteor.call("doRequest", partNumber, function(err, res) {
            if(err === "not-response") return;

            console.log(res);
        });
    }
});

我有错误:

> Exception while invoking method 'doRequest' TypeError: Object
> #<Object> has no method 'indexOf' I20150227-00:01:35.455(3)?     at Object._call (packages/http/httpcall_server.js:42:1)
> I20150227-00:01:35.455(3)?     at Object._.extend.wrapAsync [as call]
> (packages/meteor/helpers.js:118:1) I20150227-00:01:35.455(3)?     at
> [object Object].Meteor.methods.doRequest (app/server/server.js:19:18)

你能帮帮我吗,我的错误在哪里?

尝试

var paramsData = [sources[key].params];

我怀疑它正在那里寻找数组。

在我的例子中,auth 字段不正确。真正的方法是 auth:"login: password",看起来只是字符串。第二个错误 - 不需要 auth 字段。对于此服务,登录名和密码作为参数发送 { params: {l:"login", p: "password", act: "brand_by_nr" ....} }