Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将环回框架应用程序连接到预先存在的/数据填充的MySQL数据库/数据源?_Mysql_Node.js_Loopbackjs_Loopback - Fatal编程技术网

如何将环回框架应用程序连接到预先存在的/数据填充的MySQL数据库/数据源?

如何将环回框架应用程序连接到预先存在的/数据填充的MySQL数据库/数据源?,mysql,node.js,loopbackjs,loopback,Mysql,Node.js,Loopbackjs,Loopback,此问题特别适用于来自StrongLoop(由IBM拥有/支持)。据我所知,这应该是一个两步的过程 编写一个脚本,从现有的MySQL模式中发现/创建模型。以下是与此相关的官方文件: 我认为我使用以下NPM包成功地处理了发现/模型创建部分:(GitHub repo for project可在此处找到:) 使用自动更新(通过loopback project/server/boot目录中的脚本)进行检查,以确保MySQL DB符合发现/创建模块创建的模型定义。下面是一个StackOverflow主题,介

此问题特别适用于来自StrongLoop(由IBM拥有/支持)。据我所知,这应该是一个两步的过程

  • 编写一个脚本,从现有的MySQL模式中发现/创建模型。以下是与此相关的官方文件:
  • 我认为我使用以下NPM包成功地处理了发现/模型创建部分:(GitHub repo for project可在此处找到:)

  • 使用自动更新(通过loopback project/server/boot目录中的脚本)进行检查,以确保MySQL DB符合发现/创建模块创建的模型定义。下面是一个StackOverflow主题,介绍LoopBack的自动迁移和自动更新功能之间的区别:
  • 从那里,我想我应该能够点击我的API并访问MySQL数据源中的数据,但是,唉

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

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

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

    当我使用node启动环回实例时。我可以击中,我有适当的积垢选项为我的'职位'模式完全正如我所期望的

    不过

    当我尝试通过GET Posts Api端点查询我的DB时,我收到以下错误,即我的表不存在(尽管在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)"
      }
    }
    
    {
    “错误”:{
    “状态代码”:500,
    “名称”:“错误”,
    “消息”:“没有这样的表:表'my_mysqlDB.Posts'不存在”,
    “代码”:“没有这样的表格”,
    “errno”:1146,
    “sqlState”:“42S02”,
    “索引”:0,
    “stack”:“Error:ER\u NO\u此类\u TABLE:TABLE'my\u mysqlDB.Posts'在Query.Sequence不存在。\n packetToError(/app/AvailableTripsLBcode/node\modules/mysql/lib/protocol/sequences/Sequence.js:52:14)\n在Query.ErrorPacket(/app/AvailableTripsLBcode/node\modules/mysql/lib/protocol/sequences/Query.js:77:18)\n在protocol.\parsePacket(/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/protocol/protocol.js:280:23)\n在Parser.write(/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/protocol.js:39:16)\n在套接字。(/app/AvailableTripsLBcode/node\u modules/mysql/lib/Connection.js:103:28)\n在emitOne(events.js:96:13)\n在Socket.emit(events.js:188:7)\n在readableAddChunk(\u stream\u readable.js:176:18)\n在Socket.readable.push(\u stream\u readable.js:134:10)\n在TCP.onread(net.js:551:20)\n在Protocol.\n(/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/protocol.js:141:48)\n在PoolConnection.query(/app/AvailableTripsLBcode/node_modules/mysql/lib/Connection.js:208:25)\n在runQuery(/app/AvailableTripsLBcode/node_modules/loopback connector mysql/lib/mysql.js:186:16)\n在executeWithConnection(/app/AvailableTripsLBcode/node_modules/loopback connector mysql/lib/mysql.js:228:7)\n在Ping.onOperationComplete[as_callback](/app/AvailableTripsLBcode/node_modules/mysql/lib/Pool.js:110:5)\n在Ping.Sequence.end(/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/sequences/sequences/sequences/sequences.js:86:24)\n(/app/AvailableTripsLBcode/node\u modules/mysql/lib/protocol/sequences/Sequence.js:95:8)\n在protocol.write(/app/AvailableTripsLBcode/node\modules/node\modules/mysql/lib/protocol/Parser.js:75:12)\n在protocol.write(/app/AvailableTripsLBcode/node_modules/mysql/lib/protocol/protocol.js:39:16)\n位于套接字。(/app/AvailableTripsLBcode/node_modules/mysql/lib/Connection.js:103:28)\n位于emitOne(events.js:96:13)\n位于Socket.emit(events.js:188:7)\n位于readableAddChunk(\u stream\u readable.js:176:18)\n位于Socket.readable.push(\u stream\u readable.js:134:10)\n位于TCP.onread(net.js:551:20)”
    }
    }
    
    我只关心DB(posts)上的一个表,我只需要读不写。我不确定我是否需要所有其他模型的模型在common/models目录中,或者我是否只能在数据源上拥有与我的“posts”表相关的我的posts模型,为此,我尝试了两种方法,但都没有成功

    我觉得LoopBack是如何处理基于模型的模式创建的,我缺少了一些东西,但到目前为止,我还没有解决它的任何运气

    其他一些说明/细节

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

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

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

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

    是名为“post”的模型?对应的表名是什么?@itssajan Model name是Post,table name是Post。在您发表评论并在GitHub上看到问题后,我使用以下标志/环境变量输出由LoopBack生成的SQL查询,以查看是否有任何线索,为此我运行了:export DEBUG=LoopBack:connector:mysql这很有帮助,因为它表明,无论出于何种原因,即使在common/models/posts.js中将表设置为“posts”,生成的SQL查询也会使用