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