JavaScript >> Javascript 文檔 >  >> Node.js

將 AWS RDS 與 Node.js 和 Express.js 結合使用

簡介

毫不誇張地說,信息和數據支配著世界。幾乎任何 應用程序,從社交媒體和電子商務網站到簡單的時間跟踪器和繪圖應用程序,都依賴於存儲和檢索數據這一非常基本和基本的任務,以便按預期運行。

Amazon 的關係數據庫服務 (RDS) 提供了一種使用各種關係數據庫技術在雲中設置數據庫的簡單方法。在本文中,我們將在 RDS 上建立一個數據庫,並通過 Node 應用程序在其上存儲數據。

先決條件

亞馬遜網絡服務

Amazon Web Services (AWS) 提供了一系列用於在雲中構建應用程序的工具。由於 RDS 是 AWS 服務,我們需要設置一個 AWS 賬戶。

AWS 為許多很棒的東西提供免費套餐,RDS 也不例外 - 您可以每月使用 750 小時(31 天)db.t2.micro 數據庫免費使用 12 個月。

郵遞員

Postman 是用於創建和發送請求的有用工具。我們將在本文的 Node 部分使用它來測試我們編寫的代碼。

Postman 是可選的,實際上,您可以使用任何工具來測試端點,甚至是您的 Internet 瀏覽器。

設置 RDS 實例

首先,我們將創建我們的 RDS 實例集群。前往 AWS 並登錄。

登錄後,點擊“服務” 在左上角,然後搜索 'RDS' .您將看到一個如下所示的頁面:

在左側的菜單中,選擇 'Databases' .這通常會顯示我們創建的 RDS 實例集群列表,但我們還沒有。

要創建一個,請單擊橙色“創建數據庫” 按鈕。您應該看到如下所示的頁面:

AWS 最近推出了“輕鬆創建” 創建新 RDS 實例的方法,所以讓我們使用它。

“引擎類型”下 我們將使用 'Amazon Aurora' ,這是亞馬遜自己針對 RDS 優化的數據庫引擎。對於該版本,我們將此設置保留為“兼容 MySQL 5.6 的 Amazon Aurora” .

“數據庫實例大小”下 選擇“開發/測試” 選項 - 這是一種功能較弱(且更便宜)的實例類型,但對於我們需要它來說仍然綽綽有餘。

“數據庫集群標識符” 是我們正在創建的數據庫集群的名稱。讓我們稱之為 my-node-database 暫時。

對於主用戶名,保留為 admin .最後,我們可以選擇自動生成主密碼。為了方便本教程,讓我們自己設置。

確保它是安全的,因為這是主用戶名和密碼!

最後,向下滾動並點擊'創建數據庫' .完全配置 RDS 實例需要幾分鐘時間:

在開始我們的 Node 應用程序之前,我們需要確保我們可以連接到實例。選擇您剛剛創建的實例(它將是以 instance-1 結尾的選項 ) 並記下 'Endpoint' 下的值 .

在右側,在 “VPC 安全組”下 ,單擊鏈接 - 這將帶您進入已為數據庫設置的安全組。安全組本質上是關於誰可以和不可以與資源建立連接的防火牆規則。

目前,此設置為僅允許來自具有相同安全組的資源的連接。

選擇“動作” 在頂部下拉,導航到“編輯入站規則” .在此對話框中,單擊“添加規則” .對於新規則,在 'Type' 下 , 選擇“所有流量” .在“來源”下 , 選擇'任何地方' .

你最終應該得到如下所示的東西:

返回 RDS,然後“修改” 實例。在這裡,在“網絡與安全” “公共可訪問性”下的部分 ,我們要選擇'是' - 這允許我們從我們的機器連接到數據庫 - 否則我們需要將我們的應用程序放在 EC2 實例上,這不是本文的重點。

免費電子書:Git Essentials

查看我們的 Git 學習實踐指南,其中包含最佳實踐、行業認可的標準以及隨附的備忘單。停止谷歌搜索 Git 命令並真正學習 它!

您的 RDS 實例現在應該可以使用了!讓我們編寫一些代碼來與之交互。

節點應用

為了與我們的應用程序交互,我們將創建一個非常簡單的 API,允許我們通過 Express.js 存儲用戶配置文件。在我們這樣做之前,我們需要在我們的 RDS 實例中創建一個表來存儲數據。

讓我們創建一個文件夾,進入其中並使用默認配置初始化一個空白的 Node.js 應用程序:

$ mkdir node-rds
$ cd node-rds
$ npm init -y

然後,讓我們安裝所需的依賴項:

$ npm install express --save
$ npm install mysql --save

最後,我們要創建兩個 JavaScript 文件 - 其中一個是我們的 Express 應用程序,另一個是用於在我們的數據庫中創建表的一次性腳本:

$ touch index.js
$ touch dbseed.js

表創建腳本

讓我們從 dbseed.js 開始 文件:

const mysql = require('mysql');

const con = mysql.createConnection({
    host: "<DB_ENDPOINT>",
    user: "admin",
    password: "<DB_PASSWORD>"
});

con.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");
    con.end();
});

確保換出 <DB_ENDPOINT> 對於我們之前記下的端點,並填寫密碼。這段代碼將嘗試連接到數據庫 - 如果成功,它將運行一個匿名函數來記錄 'Connected!' ,然後立即關閉連接。

我們可以通過運行快速檢查是否設置正確:

$ node dbseed.js

應用應返回'已連接!' .如果不是,則可能是安全設置存在問題 - 返回 RDS 設置並確保您已正確完成所有操作。

現在我們知道我們肯定可以連接到我們的數據庫,我們需要創建一個表。讓我們修改我們的匿名函數:

con.connect(function(err) {
    if (err) throw err;

    con.query('CREATE DATABASE IF NOT EXISTS main;');
    con.query('USE main;');
    con.query('CREATE TABLE IF NOT EXISTS users(id int NOT NULL AUTO_INCREMENT, username varchar(30), email varchar(255), age int, PRIMARY KEY(id));', function(error, result, fields) {
        console.log(result);
    });
    con.end();
});

預期的輸出應該類似於:

OkPacket {
  fieldCount: 0,
  affectedRows: 0,
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0
}

現在我們已經有了一個可以使用的表,讓我們設置 Express 應用程序以從我們的數據庫中插入和檢索數據。

插入用戶端點

讓我們寫一個 POST 在我們的 index.js 中請求創建用戶 文件:

app.post('/users', (req, res) => {
    if (req.query.username && req.query.email && req.query.age) {
        console.log('Request received');
        con.connect(function(err) {
            con.query(`INSERT INTO main.users (username, email, age) VALUES ('${req.query.username}', '${req.query.email}', '${req.query.age}')`, function(err, result, fields) {
                if (err) res.send(err);
                if (result) res.send({username: req.query.username, email: req.query.email, age: req.query.age});
                if (fields) console.log(fields);
            });
        });
    } else {
        console.log('Missing a parameter');
    }
});

這段代碼的作用非常簡單——它打包了來自 POST 的信息 請求並將其插入到查詢中。此查詢將在 RDS 數據庫中創建一個用戶並記錄結果。

讓我們檢查它是否有效:

$ node index.js

在 Postman 中,我們要創建一個 POST 向我們的服務器請求。讓我們輸入所需的參數並發送請求:

我們應該得到相同的數據,這意味著它工作正常並且我們的端點已經插入了一個用戶。

獲取用戶端點

讓我們設計一個簡單的 GET 端點以獲得更用戶友好的方式來檢查結果。 POST 下方 請求處理程序,讓我們再做一個處理程序:

app.get('/users', (req, res) => {
    con.connect(function(err) {
        con.query(`SELECT * FROM main.users`, function(err, result, fields) {
            if (err) res.send(err);
            if (result) res.send(result);
        });
    });
});

在瀏覽器中,導航到 localhost:3000/users 您應該會看到所有插入的用戶。

下一步是什麼?

保護您的數據庫

早些時候,我們使我們的 RDS 實例可公開訪問,並具有完全開放的安全組。您可以在 EC2 上進行設置,並開始通過刪除公共訪問權限並鎖定您的安全組來加強實例的安全性。

您還應該查看代碼庫 - 它是功能性的,但可能容易受到 SQL 注入等攻擊 - 值得花時間確保用戶無法在您的數據庫上執行您不打算執行的操作。

讀/寫實驗

如果您更深入地了解 RDS,您可以設置專門用於讀取或寫入的實例 - 這有助於保護您的實例,但如果您正在處理大量數據庫操作,這有助於優化您的數據庫性能。

嘗試不同的配置

我們使用 AWS 的“Easy create”來創建我們的數據庫 - 值得回過頭來嘗試您可以設置 RDS 以滿足您的特定需求的各種配置。

終止您的 RDS 實例!

如果您不打算繼續使用您的 RDS 實例,請務必終止它!否則你會在一個月內支付巨額賬單。

結論

您已經創建了一個 RDS 實例並通過 Node/Express 端點使用數據填充它。這是一個很好的跳板,可以跳入更複雜的 Web 應用程序,為用戶存儲和提供數據,並且隨著數據作為一種有價值的商品迅速增長,現在是思考你想要使用哪種數據的好時機。

最後,請記住,您存儲的任何數據都是您保護的責任 - 始終確保您了解如何構建安全 在您開始將人們的個人詳細信息放入其中之前申請!


Tutorial JavaScript 教程
  1. 如何在 Node.js 中為 Google 帳戶實現 OAuth2

  2. 從頭開始創建 Netflix 克隆:JavaScript PHP + MySQL 第 67 天

  3. 拆解反應

  4. 需要節點——第 45 卷

  5. 用於更輕鬆調試的詳細日誌片段

  6. jQuery循環在每個事件之後追加結果

  7. Typescript 中高級打字的力量

  1. 如何創建小算法相似項目

  2. 成為黑夜的戰士(噓!它的黑暗模式)

  3. 用 Go 和 Svelte 編寫的跨平台音板

  4. 重新考慮解構

  5. 帶有開始按鈕的隨機圖片

  6. 在加載時更改 ASP.NET 中的光標在沒有 JS 警報的情況下不起作用

  7. 谷歌地圖與 React

  1. 無法為彈出模式添加邊框

  2. 如何使用 Control + Enter 提交表單

  3. Ocula - 基於 Vue 3 構建的天氣應用程序

  4. React 中的狀態管理