此問題特別針對StrongLoop的LoopBack Node.js Framework(由IBM擁有/支持)。從我迄今所知的情況來看,這應該是一個兩步過程。我應該如何將LoopBack框架應用程序連接到預先存在的/數據填充的MySQL數據庫/數據源?
- 編寫腳本以從現有的MySQL模式中發現/創建模型。以下是有關的官方文檔:https://loopback.io/doc/en/lb3/Discovering-models-from-relational-databases.html
我認爲我成功地使用下面的NPM包處理的發現/模型創建片:https://www.npmjs.com/package/loopback-discovery(項目GitHub庫可以在這裏找到:https://github.com/akera-io/loopback-discovery)
- 使用AutoUpdate(通過loopback-project/server/boot目錄中的腳本)檢查以確保MySQL數據庫符合Discovery/Creation創建的Model定義模塊。下面是對回的AutoMigrate和自動更新功能之間的差異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文件可以正確配置環回以與我的服務器/ mysql實例通信。
當我啓動我的環回實例使用節點。我可以打到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)"
}
}
我只關心一個表對我的DB(職位),我只需要讀取未/寫我不知道如果我需要模型,所有其他車型要英寸common/models目錄,或者如果我只有我的Posts模型與我的數據源上的'posts'表相關,那麼我已經嘗試了兩種方式,沒有運氣。
我覺得我缺少一些關於LoopBack如何基於模型處理模式創建的問題,但我還沒有解決它的問題。
其他一些筆記/細節。
- 通過AutoMigrate重新創建不是一個選項,因爲它會丟棄表並重新創建,從而丟失所有數據(這是我首先需要連接的唯一原因)。
是名爲「郵報」的模式?什麼是相應的表名? – itssajan
@itssajan模型名稱是發佈,表名是發佈。 在你的評論和GitHub上看到的問題後,我使用以下標誌/環境變量來輸出由LoopBack生成的SQL查詢,看看是否給出了任何線索,要做到這一點我跑: export DEBUG = loopback:連接器:mysql 真的很有幫助,因爲它表明無論什麼原因,即使表格被設置爲common/models/Posts.js中的「posts」,生成的SQL查詢使用「Posts」(大寫)表名。 – Necevil