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" ....} }
我需要从外部服务获取数据。它有 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" ....} }