mysql - 我应该如何将 LoopBack Framework 应用程序连接到预先存在的/数据填充的 MySQL 数据库/数据源?

标签 mysql node.js loopbackjs loopback

此问题特别涉及 LoopBack Node.js Framework来自 StrongLoop(由 IBM 拥有/支持)。据我所知,到目前为止,这应该是一个两步过程。

  1. 编写一个脚本来从现有的 MySQL 架构中发现/创建模型。以下是有关此内容的官方文档:https://loopback.io/doc/en/lb3/Discovering-models-from-relational-databases.html

I think I successfully handled the discovery / model creation piece using the following NPM package: https://www.npmjs.com/package/loopback-discovery (GitHub repo for project can be found here: https://github.com/akera-io/loopback-discovery)

  1. 使用自动更新(通过loopback-project/server/boot 目录中的脚本)检查以确保MySQL 数据库符合发现/创建模块创建的模型定义。以下是有关 LoopBack 的 AutoMigrate 和 AutoUpdate 函数之间差异的 StackOverflow 主题:loopback automigrate vs autoupdate

从那里我认为我应该能够访问我的API并访问MySQL数据源中的数据,但是唉......

当我完成上述步骤时,我成功地从我在loopback-project/common/models目录中选择的表中获取了所有模型(我的模型恰好是来自博客的帖子)。

在我的loopback-project/server/model-config.json中,我的MySQL数据库中的所有表/模型都存在,然后我将我的“posts”模型设置为公共(public),以便通过API公开它。

由于上面讨论的 NPM 模块使用 LoopBack 和 LoopBack 数据源,我知道我可以连接到我的数据库,并且我的 Loopback-project/server/datasource.js 文件正确配置了 Loopback 以与我的服务器/mysql 实例通信。

当我使用 node 启动环回实例时。我可以打http://0.0.0.0/explore我的“帖子”模型有正确的 CRUD 选项,正如我所期望的那样。

但是。

当我尝试通过 GET Posts Api Endpoint 查询我的数据库时,我收到以下错误:我的表不存在(尽管它在 MySQL 中显然存在,因为我的博客正在使用它并且以前的 NPM 包能够从中读取)它:

{
  "error": {
    "statusCode": 500,
    "name": "Error",
    "message": "ER_NO_SUCH_TABLE: Table 'my_mysqlDB.Posts' doesn't exist",
    "code": "ER_NO_SUCH_TABLE",
    "errno": 1146,
    "sqlState": "42S02",
    "index": 0,
    "stack": "Error: ER_NO_SUCH_TABLE: Table 'my_mysqlDB.Posts' doesn't exist\n    at Query.Sequence._packetToError (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/sequences/Sequence.js:52:14)\n    at Query.ErrorPacket (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/sequences/Query.js:77:18)\n    at Protocol._parsePacket (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/Protocol.js:280:23)\n    at Parser.write (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/Parser.js:75:12)\n    at Protocol.write (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/Protocol.js:39:16)\n    at Socket.<anonymous> (/app/AvailableTripsLBcode/node_modules/mysql/lib/Connection.js:103:28)\n    at emitOne (events.js:96:13)\n    at Socket.emit (events.js:188:7)\n    at readableAddChunk (_stream_readable.js:176:18)\n    at Socket.Readable.push (_stream_readable.js:134:10)\n    at TCP.onread (net.js:551:20)\n    --------------------\n    at Protocol._enqueue (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/Protocol.js:141:48)\n    at PoolConnection.query (/app/AvailableTripsLBcode/node_modules/mysql/lib/Connection.js:208:25)\n    at runQuery (/app/AvailableTripsLBcode/node_modules/loopback-connector-mysql/lib/mysql.js:186:16)\n    at executeWithConnection (/app/AvailableTripsLBcode/node_modules/loopback-connector-mysql/lib/mysql.js:228:7)\n    at Ping.onOperationComplete [as _callback] (/app/AvailableTripsLBcode/node_modules/mysql/lib/Pool.js:110:5)\n    at Ping.Sequence.end (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/sequences/Sequence.js:86:24)\n    at Ping.Sequence.OkPacket (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/sequences/Sequence.js:95:8)\n    at Protocol._parsePacket (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/Protocol.js:280:23)\n    at Parser.write (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/Parser.js:75:12)\n    at Protocol.write (/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/Protocol.js:39:16)\n    at Socket.<anonymous> (/app/AvailableTripsLBcode/node_modules/mysql/lib/Connection.js:103:28)\n    at emitOne (events.js:96:13)\n    at Socket.emit (events.js:188:7)\n    at readableAddChunk (_stream_readable.js:176:18)\n    at Socket.Readable.push (_stream_readable.js:134:10)\n    at TCP.onread (net.js:551:20)"
  }
}

I only care about ONE table on my DB (posts) and I only need to read not / write. I am not sure if I need models for all the other models to be in common/models directory, or if I can have ONLY my Posts model which relates to my 'posts' table on the datasource, to that end I have tried both ways with no luck.

我觉得 LoopBack 如何处理基于模型的模式创建方面存在一些问题,但到目前为止我还没有运气解决它。

一些其他注释/细节。

  1. 通过 AutoMigrate 重新创建不是一个选项,因为它会删除表并重新创建,从而丢失所有数据(这是我首先需要连接的唯一原因)。

最佳答案

如果您的模型名为“Post”,则回送将在mysql中查找Post表。

    "name": "Post",
  "options": {
    "idInjection": false,
    "mysql": {
      "schema": "LOOPBACK",
      "table": "post"
    }
  }

将其添加到 post.json 文件中,它将起作用

关于mysql - 我应该如何将 LoopBack Framework 应用程序连接到预先存在的/数据填充的 MySQL 数据库/数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42562301/

相关文章:

mysql - 通过sql查询复制行

mysql - 在mysql中将数据从一个数据库迁移到另一个数据库

node.js - NodeJS 错误 : node. js :810 var cwd = process. cwd();

javascript - fs.readFileSync 始终返回空字符串

loopbackjs - 环回生成文档与 Doular 不起作用

php - 拉维尔 : How to insert the result queried from MongoDB into MySQL?

php - 更改数据库服务器为WordPress

javascript - 如何根据接受 header 进行路由重定向或发回 JSON?

object - 回送: Passing multiple object types in a remote method

javascript - 非锚定子字符串使用 Loopback API 查询字段