loopback w / table schemas,不识别选项中的模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loopback w / table schemas,不识别选项中的模式相关的知识,希望对你有一定的参考价值。

问题的性质

我的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
",

预期的行为

一旦我指定了架构 - 我希望API能够正确解析

实际行为

始终使用db user的默认架构...无论选项中指定的架构如何。

建议的解决方案

也许我把它放在错误的地方,我会继续寻找信息,我可能会遗漏一些东西。

这就是我使用DB Viewer“看到”的东西......所以你知道我指的是什么。

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/TB了address.JSON

{
    "name": "Tbladdress",
    "options": {
        "idInjection": false,
        "db2": {
            "schema": "LIVE",
            "table": "TBLADDRESS"
        }
    },
    "properties": {
        ...
    }
}

/data sources.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
",
        "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
"
    }
}

... ...头

{
    "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​​时它似乎不起作用。我不知道它是连接器还是环回应用程序。

答案

对于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数据源。

以上是关于loopback w / table schemas,不识别选项中的模式的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL Schema

create table 和 create schema的区别

mysql的关于TABLE_SCHEMA的sql语句和nformation_schema表

mysql中information_schema.tables字段说明

对对象 [INFORMATION_SCHEMA].[TABLES] 的未解决引用

SQLSTATE[HY000] [2002] 连接被拒绝 (SQL: select * from information_schema.tables where table_schema = ms_a