Methods 如何在Strongloop上为自定义远程方法设置自定义架构
我是Strongloop的新手,找不到有关如何自定义响应类(我构建的对象的模型架构)的信息,也不知道如何在API资源管理器上显示具有自定义数据的对象 例如,我有一个名为score的自定义远程方法Methods 如何在Strongloop上为自定义远程方法设置自定义架构,methods,model,response,loopbackjs,strongloop,Methods,Model,Response,Loopbackjs,Strongloop,我是Strongloop的新手,找不到有关如何自定义响应类(我构建的对象的模型架构)的信息,也不知道如何在API资源管理器上显示具有自定义数据的对象 例如,我有一个名为score的自定义远程方法 POST /Challenges/score 我想为参数data显示一个自定义模型模式,而不是单个参数,而不是质询的模型模式,正文中的数据具有所有参数,并在数据类型上向用户显示:model schema,这可能吗 { "id": "string", "limit": 0, "order"
POST /Challenges/score
我想为参数data
显示一个自定义模型模式,而不是单个参数,而不是质询的模型模式,正文中的数据具有所有参数,并在数据类型上向用户显示:model schema,这可能吗
{
"id": "string",
"limit": 0,
"order": "string",
"userId": "string"
}
另一方面,在Response类中,我想显示Response对象的模式。大概是这样的:
{
"id":"string",
"userId":"string",
"user": {},
"totalScore":0,
"tags": []
}
我看了不同的问题(和),但找不到解决这个问题的方法
更新
下面是远程方法的定义
Challenge.remoteMethod('score', {
accepts: { arg: 'data', type: 'object', http: { source: 'body' } },
returns: {arg: 'scores', type: 'array'},
http: {path: '/score', verb: 'post'}
});
我相信你可能已经看过strongloop的官方文件了。如果没有,下面的链接将解释远程方法及其接受的数据类型 假设您的自定义对象是挑战对象,要在响应中显示该对象,您必须指定类型(该类型可以是环回的数据类型之一,也可以是自定义模型)。因此,要返回挑战,您必须添加以下代码:
Challenge.remoteMethod('score', {
accepts: { arg: 'data', type: 'object', http: { source: 'body' } },
returns: {arg: 'scores', type: 'Challenge', root: true},
http: {path: '/score', verb: 'post'},
});
指定的第二个箭头是要在API调用中尝试的默认值。您可以使用默认值作为键传递任何自定义字符串。
例如,如果要传递某个对象:
Challenge.remoteMethod('score', {
accepts: {
arg: 'data',
type: 'object',
default: '{
"id": "string",
"userId": "string",
"user": {},
"totalScore": 0,
"tags": []
}',
http: {
source: 'body'
}
},
returns: {
arg: 'scores',
type: 'Challenge'
},
http: {
path: '/score',
verb: 'post'
}
});
因此,对于响应,您不能自定义模型。但是要传递默认值,您可以将任何内容放在字符串格式中。我发现解决此问题的方法是使用helper
slc loopback:model创建一个新模型
? Enter the model name: ArgChallenge
? Select the data-source to attach ArgChallenge to: (no data-source)
? Select model's base class PersistedModel
? Expose ArgChallenge via the REST API? No
? Common model or server only? server
我继续放置属性,然后在Challenge.js上:
Challenge.remoteMethod('score', {
accepts: { arg: 'data', type: 'ArgChallenge', http: { source: 'body' } },
returns: {arg: 'scores', type: 'array'},
http: {path: '/score', verb: 'post'}
});
这就行了!如果有人知道更好的方法,请分享。@jrltt,不要使用默认值,而是在accepts下使用指向类型的对象结构,它应该可以工作。注意,http源代码:body是必需的
随机对象:
Challenge.remoteMethod('score', {
accepts: {
arg: 'data',
type: {
"id": "string",
"userId": "string",
"user": {},
"totalScore": 0,
"tags": []
},
http: {
source: 'body'
}
},
returns: {
arg: 'scores',
type: 'Challenge'
},
http: {
path: '/score',
verb: 'post'
}
});
使用定义的模型,该模型可在模型配置或使用环回模型生成器创建中使用,然后该模型名称可用于点类型。
因此,让我们使用用户模型在接受参数中显示
Challenge.remoteMethod('score', {
accepts: {
arg: 'data',
type: 'User',
http: {
source: 'body'
}
},
returns: {
arg: 'scores',
type: 'Challenge'
},
http: {
path: '/score',
verb: 'post'
}
});
在环回中,远程参数可以标识使用ds.define('YourCustomModelName',dataFormat')定义的数据模型
因此,对于您的情况,在Challenge.js文件中编写一个函数,该文件将定义一个远程方法(在您的情况下score)
在远程参数类型下,使用“类型”:“YourCustomModelName”
Challenge.remoteMethod('score', {
accepts: {
arg: 'data',
type: 'YourCustomModelName',
http: {
source: 'body'
}
},
returns: {
arg: 'scores',
type: 'Challenge'
},
http: {
path: '/score',
verb: 'post'
}
});
重新启动服务器并刷新后,您应该会看到它在资源管理器上反映:)我找到了一种方法,通过更改accepts数组中的type参数来解决此问题。
当我们创建远程方法时;我们提供接受数组。有arg、type、required和http。然后我们可以将请求对象放入类型参数中
示例代码
UserModel.remoteMethod(
“登录”,
{
描述:“使用用户名/电子邮件和密码登录用户。”,
接受:[
{
arg:'凭据',
键入:{'email':'string','password':'string'},
要求:正确,
http:{source:'body'},
},
{
arg:'include',类型:['string'],http:{source:'query'},
描述:“要包含在响应中的相关对象。”+
'有关详细信息,请参阅返回值的说明。',
},
],
返回:{
arg:'accessToken',类型:'object',根:true,
说明:
g、 f('响应正文包含登录时创建的{{AccessToken}}的属性。\n'+
'根据'include'参数的值,正文可能包含'+
'其他属性:\n\n'+
“-`user`-`U+007BUserU+007D`-当前登录用户的数据。”+
{{(`include=user`}}\n\n'),
},
http:{动词:'post'},
},
);
请告诉我们您是如何定义远程方法的。@RaymondCamden我已经用远程方法更新了问题OK,所以我在解析您的确切问题时遇到了问题。您是说您返回了一组自定义数据,并希望对其进行记录?如果是这样,您能否显示用于生成结果的代码(分数)?你是说要为输入定义“数据”吗?实际上,对于“接受”部分,你真的想要一个名为数据的对象,还是想要一组键/值对?我想你只是想要键/符对,因为你没有定义任何其他的SOK,也许我没有正确地解释自己。对于“accepts”部分,我需要一个名为data的对象,该对象具有自定义键/值对。类似于单个参数,但不是参数,而是对象主体内部的参数。对于响应,我想为我构建的对象展示一种方法(使用include或order等内部过滤器)。总之,我将explorer api提供给外部用户,然后他们使用定制服务,他们知道数据对象中要发送的键/值以及api响应对象。对不起!起初我认为这是一个简单的想法,但没有时间去尝试。昨天我尝试了一下,直到今天我都无法回答您,在定义默认值时,loopback忽略了它,并继续显示基本模型的结构
Challenge.remoteMethod('score', {
accepts: {
arg: 'data',
type: 'YourCustomModelName',
http: {
source: 'body'
}
},
returns: {
arg: 'scores',
type: 'Challenge'
},
http: {
path: '/score',
verb: 'post'
}
});