在远程方法的上下文中,我试图定义在主体中传递的参数的模型模式。该对象如下所示:
{
name: "Alex",
credentials: {
user: "alex",
pass: "pass"
}
}
所以,我在远程方法定义中有这个代码:
MyModel.remoteMethod("postSomething", {
accepts: [
{arg: 'person', type: {
"name": "string",
"credentials": {
"type": "object",
"properties": {
"user": "string",
"pass: "string"
}
}
}, http: {source: 'body'}, required: true
}
],
.....
不幸的是,生成的Swagger资源管理器中未显示此嵌入对象(凭据)的详细信息。这就是我所看到的:
{
"user": "string",
"credentials": {}
}
我尝试了很多不同的方法,但是我无法显示凭证对象的属性。
有什么想法吗?
答案 0 :(得分:3)
Loopback 2.x
编辑:注意以下内容仅适用于Loopback 2.x,因为类型注册表在3.x中已更改。
问题是您提供的数据需要位于嵌套值的type
属性上。这应该有效:
MyModel.remoteMethod('postSomething', {
accepts: [
{
arg: 'person',
type: {
name: 'string',
credentials: {
type: {
user: 'string',
pass: 'string'
}
}
},
http: {
source: 'body'
},
required: true
}
],
//...
这也适用于数组:
accepts: [
{
arg: 'Book',
type: {
title: 'string',
author: 'string',
pages: [{
type: {
pageNo: 'number',
text: 'string'
}
}]
}
}
],
// ...
Loopback 3.x
由于模型注册表和强大的远程处理在Loopback 3.x中更改为仅允许字符串或数组类型,因此您无法真正避免创建新模型。如果你想快速内联'一个模型没有经过添加模型json文件的完整过程,将其添加到model-config.json
等等,您可以直接在应用程序上注册它:
app.registry.createModel('Person', {
firstName: 'string',
lastName: 'string'
}, { base: 'Model' });
如果要扩展现有模型,可以将基数设置为其他模型之一(例如,添加仅在给定远程方法中接受的另一个属性)
如果您想在不混淆模型注册表的情况下创建模型,可以通过在loobpack
上调用createModel来实现:
const loopback = require('loopback')
const modl = loopback.createModel({
name: 'Person',
base: null,
properties: {
firstName: {
type: 'string',
id: true // means it won't have an id property
}
}
});
在上述两个示例中,您将按名称引用模型以将其附加到远程方法:
accepts: [
{
arg: 'Person',
type: 'Person'
}
],
// ...
请注意,您需要为每个子属性(例如凭证)
创建子模型答案 1 :(得分:0)
Loopback swagger仅捕获外部对象而忽略对象的属性。 如果要在请求正文的swagger文档中显示嵌套对象,则必须创建嵌套模型。
假设您有一个名为person的模型。你必须创建另一个名为"凭证"拥有属性用户和密码。然后在您的人物模型配置中定义关系
{
"name": "Person",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {
"credentials": {
"type": "embedsOne",
"model": "credentials",
"property": "credentials",
"options": {
"validate": true,
"forceId": false
}
}
},
"acls": [],
"methods": {}
}
添加对此模型的引用,您可以在其中定义远程方法
MyModel.remoteMethod("postSomething", {
accepts: [
{arg: 'person', type: {Person},
http: {source: 'body'}, required: true
}
],
避免"处理未知的远程类型"警告确保您的模型标记为" public"在你的" model-config.json"
中