我想在Loopback应用程序中从第三方REST服务获取数据。为了从Service获取数据,我需要首先使用登录名和密码进行身份验证。我可以使用curl测试服务:
Host: http://api.awesome.service.com/
User-Agent: curl/7.47.0
Accept: */*
Cookie: HBFAPI_SESSID=hbapi%3A197887%3A58a3028d12c36%3Anym2
Content-Length: 58
Content-Type: application/x-www-form-urlencoded
{"auth":{"username":"MyUser","password":"Secret"}}
这很有效。 Tcpdump显示这样的请求:
{
"awesome_datasource": {
"name": "awesome_datasource",
"baseURL": "https://api.awesome.service.com/",
"crud": false,
"connector": "rest",
"operations": [{
"template": {
"method": "POST",
"url": "http://api.awesome.service.com/auth",
"form":{
"auth": {
"username": "{username:string}",
"password": "{password:string}"
}
},
"json": true
},
"functions":{
"login": ["username", "password"]
}
}]
}
}
所以,我先创建了数据源:
host: api.awesome.service.com
content-type: application/x-www-form-urlencoded
accept: application/json
content-length: 66
Connection: close
auth%5Busername%5D=MyUser&auth%5Bpassword%5D=Secret
我使用资源管理器进行了测试。无论我做什么,我都无法将请求体中的数据格式化为json。有或没有json选项结果是相同的,在tcpdump中是:
https://github.com/strongloop/loopback-connector-rest/pull/12
我已尝试将参数传递为'query','form'或'data'选项。还检查了各种标题内容类型选项,但到目前为止没有运气。
模型很简单,没有参数。基本模型是'模型'(没有用户,因为我希望尽可能保持简单)
我能够找到这个帖子,但它没有多大帮助:
{{1}}
非常感谢任何建议。
答案 0 :(得分:1)
你所要做的就是在那里使用json
代替form
:
{
"awesome_datasource": {
"name": "awesome_datasource",
"baseURL": "https://api.awesome.service.com/",
"crud": false,
"connector": "rest",
"operations": [{
"template": {
"method": "POST",
"url": "http://api.awesome.service.com/auth",
"json": {
"auth": {
"username": "{username:string}",
"password": "{password:string}"
}
}
},
"functions":{
"login": ["username", "password"]
}
}]
}
}
REST连接器尝试尽可能地模仿request module。基本上body
,json
,form
和query
(请求中为qs
)执行与请求选项相同的操作,但它们也接受模板字符串。这是来自请求的文档,稍作修改:
query
(请求中为qs
) - 包含要附加到uri
的查询字符串值的对象body
- PATCH,POST和PUT请求的实体主体。必须是Buffer
,String
或ReadStream
。如果json
为true
,则body
必须是JSON可序列化对象。form
- 在传递对象或查询字符串时,会将body
设置为值的查询字符串表示形式,并添加Content-type: application/x-www-form-urlencoded
标头。如果没有选项,则返回FormData
实例(并通过管道传递请求)。请参阅"表格"以上部分。json
- 将body
设置为值的JSON表示,并添加Content-type: application/json
标头。另外,将响应主体解析为JSON。