簡體   English   中英

在Azure上運行Node.js服務器和數據庫

[英]Running a Node.js server and database on Azure

作為序言,我是Web開發的新手,以前從未發布過網站。

我已經建立了一個在本地運行良好的網站,我想使用Azure將其發布到Web。

該站點使用的是我自己編寫的node.js服務器(無快遞),該服務器使用sqlite3節點模塊連接到SQLite3數據庫。

我要做的就是發布此網站,我已經嘗試使用Azure通過使用Azure命令行工具從該網站的Git存儲庫中創建Web應用程序來進行發布。

我擁有的Azure設置

我有一個指向server.js文件的package.json文件,該文件是網站的后端,並且在網站中提供文件,它還從我在網站文件夾中也有的SQLite3數據庫返回數據。 我也有以下的web.config文件: https : //github.com/projectkudu/kudu/wiki/Using-a-custom-web.config-for-Node-apps ,我的服務器路徑已更改為與我的服務器匹配。

當我嘗試訪問該站點時,得到的只是一個空白屏幕,應用程序日志中出現以下錯誤: Error: SQLITE_CANTOPEN: unable to open database file at Error (native)

因此,我猜測這意味着將數據庫以這種方式內置到站點中會出現問題,如果我注釋掉數據庫中的內容,它將可以很好地加載站點(減去數據庫內容)。 當我嘗試在azure控制台中測試運行服務器時,出現“錯誤請求”錯誤,在我自己的計算機上運行正常。

我的問題基本上是,考慮到我面臨的挑戰,我應該如何實現建立站點的目標? 擁有集成的db文件是完全錯誤的方法還是可以使它工作? 我玩過創建一個蔚藍數據庫的過程,但是我無法弄清楚如何從我的數據庫文件中獲取數據。 Azure虛擬機是否可行,我讀到的建議是,它們適用於我只托管一個站點的計算密集型項目嗎?

我嘗試重現您的問題,並在Azure Web Apps上使用sqlite3模塊構建一個簡單的nodejs服務器。 但這對我來說很好用,這是我的測試步驟,您可以嘗試按照我的步驟解決問題。

  1. 至於要安裝sqlite3需要node-pre-gyp ,這是Azure Web Apps上的部署任務不支持的本Native Modules 因此,我們可以在本地安裝sqlite3模塊,並與應用程序一起將node_modules文件夾部署到Azure。
  2. 由於Azure上的nodejs運行時處於ia32平台版本。 因此,我們需要在本地使用命令npm install sqlite3 --target_arch=ia32進行npm install sqlite3 --target_arch=ia32
  3. 這是我測試中的代碼:

     var http = require("http"); var server = http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/html"}); response.write("<!DOCTYPE html>"); response.write("<html>"); response.write("<head>"); response.write("<title>Hello World Page</title>"); response.write("</head>"); response.write("<body>"); var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database('test.db'); var data = []; db.serialize(function() { db.run("CREATE TABLE IF NOT EXISTS lorem (info TEXT)"); var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); for (var i = 0; i < 10; i++) { stmt.run("Ipsum " + i); } stmt.finalize(); db.each("SELECT * FROM lorem", function(err, row) { data.push(row); }, function() { response.write(JSON.stringify(data)); response.write("</body>"); response.write("</html>"); response.end(); }); }); db.close(); }); server.listen(process.env.PORT || 1337); 

如有任何其他疑問,請隨時告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM