node js mysql2数据库 toml配置文件使用示例

node js 环境版本

  • NodeJS 16 or later

  • TypeScript 4.9.3 or later

依赖模块安装

bash 复制代码
npm install mysql2 --save
npm install toml --save
npm install moment-timezone --save
npm install @types/moment --save

toml配置文件解析

config.ts

javascript 复制代码
// config.ts
import fs from 'fs';
import toml from 'toml';
​
// 读取当前文件夹下的 config.toml 配置文件
let config = toml.parse(fs.readFileSync('config.toml').toString());
​
export default config;

mysql数据库链接获取

javascript 复制代码
// mysql/connection.ts
import config from "../config";
​
import mysql from 'mysql2/promise';
​
let connection: mysql.Connection;
​
const getConnection = async () => {
    if (!connection) {
        connection = await mysql.createConnection({
            host     : config.mysql.host,
            user     : config.mysql.user,
            password : config.mysql.password,
            database : config.mysql.database
        });
    }
​
    return connection;
}
​
export {
    getConnection
};

mysql数据库操作对象定义

javascript 复制代码
// metrics/add-client-log.ts
import moment from "moment-timezone";
import config from "config";
import { getConnection } from "../mysql/connection";
​
export default async function addClientLog(clientId: string, eventKey: string, eventValue: string): Promise<void> {
    const connection = await getConnection();
    const enableLogging = config.runtime.enableLogging ?? false;
​
    if (!enableLogging) {
        return;
    }
​
    const date = moment().tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
    await connection.query(
        `INSERT INTO client_log
         VALUES (
             0,
             "${connection.escape(clientId)}",
             "${connection.escape(eventKey)}",
             "${connection.escape(eventValue)}",
             "${date}"
        )
    `);
}
​
复制代码

mysql数据库操作对象 使用示例

javascript 复制代码
// config.ts
import addClientLog from '../metrics/add-client-log';
​
// 使用示例
await addClientLog(123, "initialized", "localhost");
复制代码

相关资源

  • 数据库脚本
sql 复制代码
CREATE TABLE IF NOT EXISTS `client_log` (
  `id` int NOT NULL AUTO_INCREMENT,
  `clientId` varchar(255) DEFAULT NULL,
  `eventKey` varchar(255) DEFAULT NULL,
  `eventValue` text,
  `date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
);

config.toml

XML 复制代码
environment = "local"
​
###
# Config for the web and websockets servers
# The password is for any routes you want to password protect
# By default this is only the endpoint that lists active connections for debugging purposes
###
[server]
httpPort = 8000
websocketPort = 8080
domain = 'localhost'
password = 'changeme'
​
# A list of banned IPs
bannedIps = [
    '999.999.999.999',
]
​
# A list of banned Client IDs
bannedClientIds = [
    'df3453rewr349543utff'
]
​
# A list of banned hostnames
bannedHostnames = [
    'evil.com'
]
​
###
# MySQL is used for Logging wnen it is enabled
###
[mysql]
host = 'localhost'
user = 'root'
password = 'changeme'
database = 'test'
​
###
# Enable or disable debug output and logging
###
[runtime]
debug = true
enableLogging = false
相关推荐
shykevin11 分钟前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
我不是程序猿儿14 分钟前
【C#】 lock 关键字
java·开发语言·c#
漫路在线1 小时前
JS逆向-某易云音乐下载器
开发语言·javascript·爬虫·python
小辉懂编程1 小时前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
程序员拂雨2 小时前
Node.js中的URL模块
node.js
BillKu2 小时前
Vue3 Element Plus 对话框加载实现
javascript·vue.js·elementui
醍醐三叶2 小时前
C++类与对象--2 对象的初始化和清理
开发语言·c++
初遇你时动了情3 小时前
html js 原生实现web组件、web公共组件、template模版插槽
前端·javascript·html
Magnum Lehar3 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
Yushan Bai3 小时前
ORACLE RAC环境REDO日志量突然增加的分析
数据库·oracle