问题的性质
我的db2数据库广泛使用表模式进行组织,所以有问题的表是LIVE.TBLADDRESS -
我的模型使用“选项”来指定表架构
"options": {
"idInjection": false,
"db2": {
"schema": "LIVE",
"table": "TBLADDRESS"
}
}
模型使用
在model-config.json中,"Tbladdress": {
"dataSource": "x3",
"public": true
}
当我尝试使用资源管理器执行简单的“获取”或任何其他API调用时,出现错误。
"statusCode": 500,
"name": "Error",
"message": "[IBM][CLI Driver][DB2/LINUXX8664] SQL0204N "DB2X.TBLADDRESS" is an undefined name. SQLSTATE=42704\r\n",
预期行为
一旦我指定了架构 - 我希望API能够正确解析
实际行为
始终使用db user的默认架构...无论选项中指定的架构如何。
建议的解决方案
也许我把它放在错误的地方,我会继续寻找信息,我可能会遗漏一些东西。
这就是我使用数据库查看器“看到”...所以你知道我指的是什么。
DEV - host:50000/DEV
-schemas
|-AAA
|-BBB
|-DB2X (this is the schema that the error is referring to...but NOT the one specified in the model)
|-DDD
|-LIVE (this is the correct schema)
|--Tables
|--|-TBLA
|--|-TBLADDRESS
|-ZZZ
如果有帮助 - 手动创建发现脚本生成的模型或模型就会发生这种情况。
这些是我的配置文件和模型
/common/models/Tbladdress.json
{
"name": "Tbladdress",
"options": {
"idInjection": false,
"db2": {
"schema": "LIVE",
"table": "TBLADDRESS"
}
},
"properties": {
...
}
}
/datasources.json
{
"db": {
"name": "db",
"connector": "memory"
},
"x3": {
"name": "x3",
"connector": "db2",
"username": "...",
"password": "...",
"database": "...",
"hostname": "...",
"port": 50000
}
}
/model-config.json
{
"_meta": {
...
},
"User": {
"dataSource": "db"
},
"AccessToken": {
"dataSource": "db",
"public": false
},
"ACL": {
"dataSource": "db",
"public": false
},
"RoleMapping": {
"dataSource": "db",
"public": false,
"options": {
"strictObjectIDCoercion": true
}
},
"Role": {
"dataSource": "db",
"public": false
}
,"Tbladdress": {
"dataSource": "x3",
"public": true
}
}
http://localhost:3000/explorer/#!/Tbladdress/Tbladdress_findById
{
"error": {
"statusCode": 500,
"name": "Error",
"message": "[IBM][CLI Driver][DB2/LINUXX8664] SQL0204N \"DB2X.TBLADDRESS\" is an undefined name. SQLSTATE=42704\r\n",
"errors": [],
"error": "[node-ibm_db] SQL_ERROR",
"state": "42S02",
"stack": "Error: [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N \"DB2X.TBLADDRESS\" is an undefined name. SQLSTATE=42704\r\n"
}
}
...接头...
{
"date": "Sun, 18 Feb 2018 05:20:36 GMT",
"x-content-type-options": "nosniff",
"x-download-options": "noopen",
"x-frame-options": "DENY",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"access-control-allow-credentials": "true",
"vary": "Origin, Accept-Encoding",
"x-xss-protection": "1; mode=block"
}
是:
loopback-cli v3 生成快速应用
loopback-connector-db2 连接到DB2 v10
节点v8.9.2
Package.JSON依赖项看起来像这样(如上所述它是一个默认安装,添加了一个模型 - 看看我是否可以让它工作)
"dependencies": {
"compression": "^1.0.3",
"cors": "^2.5.2",
"helmet": "^1.3.0",
"loopback": "^3.0.0",
"loopback-boot": "^2.6.5",
"loopback-component-explorer": "^5.0.0",
"loopback-connector-db2": "^2.1.1",
"serve-favicon": "^2.0.1",
"strong-error-handler": "^2.0.0"
},
是的 - 当我在数据发现中指定“LIVE”架构时,DB2连接器工作正常 - 但是当我使用API时它似乎不起作用。我不知道它是连接器还是环回应用程序。
答案 0 :(得分:1)
对于loopback-connector-db2
,您必须在SCHEMA
配置文件中定义datasources.json
。
{
"x3": {
"name": "x3",
"connector": "db2",
"username": "...",
"password": "...",
"database": "...",
"hostname": "...",
"port": 50000
},
"x3Live": {
"name": "x3Live",
"connector": "db2",
"schema": "LIVE",
"username": "...",
"password": "...",
"database": "...",
"hostname": "...",
"port": 50000
}
}
不幸的是,您需要创建一个新的数据源(例如x3Live
)。使用x3
模式的旧DB2X
数据源和使用x3Live
模式的模型的新LIVE
数据源。