2024-10-16|閱讀時間 ‧ 約 0 分鐘

第三方金流串接 – 資料庫串接

    ※ 認識Knex.js:

    Knex.js是一個專門串接資料庫的抽象化層,它支援多種關聯式資料庫,包括 PostgreSQL、MySQL、MariaDB、SQLite3、Oracle 和 Amazon Redshift 等。好處是連接以上的資料庫時,可以直接使用Knex.js的語法,就會自動創建出相對應的資料庫語法。在進行資料庫遷移時,只需要小幅度的修改,而不需要重寫大部分的程式碼,這就是抽象隔離層的其中一個好處。

    ※ 下載Knex.js:

    npm install knex --save

    ※ 下載MySQL

    npm install mysql

    ※ 建立 Knex.js來和 MySQL 連接

    在 utils 中建立 index.ts檔案 Knex.js來和 MySQL 連接

    raw-image


    導入 Knex.js

    import knex, { Knex } from "knex";


    創建資料庫連接函數

    export const createDatabase = () => {
    return knex({
    client: 'mysql',
    connection: {
    host: '127.0.0.1',
    port: 3306,
    user: 'root',
    password: 'password',
    database: 'xue_mi'
    },
    pool: {
    min: 0,
    max: 5
    }
    });
    }
    • export const createDatabase = () => { ... }:這行代碼導出了一個函數 createDatabase,用於建立資料庫連接。
    • client: 'mysql':指定使用 MySQL 作為資料庫客戶端。
    • connection:設置資料庫連接參數,包括主機、端口、用戶名、密碼和資料庫名稱。
      • host: '127.0.0.1':資料庫伺服器的主機地址。
      • port: 3306:資料庫伺服器的端口號。
      • user: 'root':資料庫用戶名。
      • password: 'password':資料庫用戶密碼。
      • database: 'xue_mi':資料庫名稱。
    • pool:設置連接池的參數,用於管理資料庫連接。
      • min: 0:最小連接數量。
      • max: 5:最大連接數量。

    在 App 類中連線資料庫:

    import { Knex } from 'knex';
    import { createDatabase } from './utils';

    class App {
    public app: express.Application;
    private knexSql: Knex;//新增

    constructor() {
    this.app = express();
    this.config();
    this.knexSql = createDatabase();//新增
    this.routerSetup();
    this.errorHandler();
    this.knexSql
    .select()
          .from('products')
          .then((result) => {
            console.log(result)
          })//新增
    }
    }

    ※ 設定環境變數

    建立environment(.env)設定檔:

    目的是定義資料庫的設定。

    • .env檔案內容:
    DATABASE_HOST = '127.0.0.1'
    DATABASE_PORT = 3306
    DATABASE_USER = 'root'
    DATABASE_PASSWORD = 'password'
    DATABASE_DATABASE = 'xuemi'
    • index.ts檔案內容:
    export const createDatabase = () => {
    return knex({
    client: 'mysql',
    connection: {
    //修改
    host: process.env.DATABASE_HOST || '127.0.0.1',
    port: Number(process.env.DATABASE_PORT) || 3306,
    user: process.env.DATABASE_USER || 'root',
    password: process.env.DATABASE_PASSWORD || 'password',
    database: process.env.DATABASE_DATABASE || 'xuemi'
    },
    pool: {
    min: 0,
    max: 5
    }
    })
    }


    ※ 下載dotenv

    目的是用 dotenv 來讀取.env 檔案中的環境變數,並將它們加載到 process.env 中。

    npm install dotenv

    www.ts檔中引入 dotenv :

    import { config } from 'dotenv';
    config();

    ※ www.ts檔案介紹

    www.ts 是應用程式的入口點,啟動伺服器。

    • 負責啟動伺服器,設置伺服器監聽的端口,並處理伺服器相關的錯誤和事件。
    • 一般用於初始化和管理伺服器進程。

    ※ www.ts檔案內容

    1. 載入模組引用應用程序和其他所需模組
    import app from './app';
    import http from 'http';
    1. 設定埠號:設置伺服器運行的埠號。
    const port = process.env.PORT || 3000;
    app.set('port', port);
    1. 建立 HTTP 伺服器:建立一個 HTTP 伺服器來處理請求。
    const server = http.createServer(app);
    1. 監聽事件:監聽伺服器事件,如啟動成功、錯誤處理等。
    server.listen(port);
    server.on('error', onError);
    server.on('listening', onListening);

    function onError(error: NodeJS.ErrnoException): void {
    if (error.syscall !== 'listen') {
    throw error;
    }

    const bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

    switch (error.code) {
    case 'EACCES':
    console.error(`${bind} requires elevated privileges`);
    process.exit(1);
    break;
    case 'EADDRINUSE':
    console.error(`${bind} is already in use`);
    process.exit(1);
    break;
    default:
    throw error;
    }
    }

    function onListening(): void {
    const addr = server.address();
    const bind = typeof addr === 'string'
    ? `pipe ${addr}`
    : `port ${addr.port}`;
    console.log(`Listening on ${bind}`);
    }
    1. 啟動伺服器:最終啟動伺服器並開始監聽請求。



    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.