feat: support product information PostgreSQL config
This commit is contained in:
parent
d726dfd4cb
commit
4b1e004b3c
1
backend/package-lock.json
generated
1
backend/package-lock.json
generated
@ -28,6 +28,7 @@
|
||||
"multer": "^2.1.1",
|
||||
"mysql2": "^3.6.5",
|
||||
"node-cron": "^3.0.3",
|
||||
"pg": "8.17.2",
|
||||
"playwright": "^1.60.0",
|
||||
"sharp": "^0.33.5",
|
||||
"uuid": "^9.0.1",
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
"multer": "^2.1.1",
|
||||
"mysql2": "^3.6.5",
|
||||
"node-cron": "^3.0.3",
|
||||
"pg": "8.17.2",
|
||||
"playwright": "^1.60.0",
|
||||
"sharp": "^0.33.5",
|
||||
"uuid": "^9.0.1",
|
||||
|
||||
@ -1479,6 +1479,13 @@ function getDefaultPortByDriver(driver) {
|
||||
return 3306;
|
||||
}
|
||||
|
||||
function normalizeDatabaseDriver(driver) {
|
||||
const normalized = String(driver || '').trim().toLowerCase();
|
||||
if (normalized === 'postgresql' || normalized === 'postgres') return 'postgres';
|
||||
if (normalized === 'mssql') return 'mssql';
|
||||
return 'mysql';
|
||||
}
|
||||
|
||||
async function getStoredDatabaseConfig(configName) {
|
||||
const normalizedName = normalizeDatabaseConfigName(configName);
|
||||
let configs = await database.local.query(
|
||||
@ -1617,7 +1624,9 @@ router.put('/database', async (req, res) => {
|
||||
}
|
||||
|
||||
// 根据数据库类型设置默认端口
|
||||
const resolvedDriver = driver || existingConfig?.driver || (useEnvConfig ? envSummary.driver : 'mysql');
|
||||
const resolvedDriver = normalizeDatabaseDriver(
|
||||
driver || existingConfig?.driver || (useEnvConfig ? envSummary.driver : 'mysql')
|
||||
);
|
||||
const defaultPort = getDefaultPortByDriver(resolvedDriver);
|
||||
|
||||
const configData = {
|
||||
@ -1711,6 +1720,8 @@ router.post('/database/test', async (req, res) => {
|
||||
return res.status(400).json({ success: false, error: '请完整填写数据库连接信息' });
|
||||
}
|
||||
|
||||
driver = normalizeDatabaseDriver(driver);
|
||||
|
||||
if (driver === 'mssql') {
|
||||
// SQL Server 连接测试
|
||||
const sql = require('mssql');
|
||||
@ -1730,6 +1741,26 @@ router.post('/database/test', async (req, res) => {
|
||||
const pool = await sql.connect(config);
|
||||
await pool.request().query('SELECT 1 as test');
|
||||
await pool.close();
|
||||
} else if (driver === 'postgres') {
|
||||
const { Client } = require('pg');
|
||||
const client = new Client({
|
||||
host,
|
||||
port: port || 5432,
|
||||
database: dbName,
|
||||
user: username,
|
||||
password,
|
||||
ssl: ssl ? { rejectUnauthorized: false } : false,
|
||||
connectionTimeoutMillis: 10000,
|
||||
query_timeout: 10000,
|
||||
statement_timeout: 10000,
|
||||
});
|
||||
|
||||
try {
|
||||
await client.connect();
|
||||
await client.query('SELECT 1 AS test');
|
||||
} finally {
|
||||
await client.end().catch(() => {});
|
||||
}
|
||||
} else {
|
||||
// MySQL 连接测试
|
||||
const mysql = require('mysql2/promise');
|
||||
|
||||
@ -41,11 +41,13 @@ const { Text } = Typography;
|
||||
const DRIVER_OPTIONS = [
|
||||
{ value: 'mysql', label: 'MySQL / MariaDB' },
|
||||
{ value: 'mssql', label: 'SQL Server (MSSQL)' },
|
||||
{ value: 'postgres', label: 'PostgreSQL' },
|
||||
];
|
||||
|
||||
const DEFAULT_PORTS = {
|
||||
mysql: 3306,
|
||||
mssql: 1433,
|
||||
postgres: 5432,
|
||||
};
|
||||
|
||||
const CORE_CONFIG_NAMES = new Set([
|
||||
@ -59,6 +61,7 @@ const CONFIG_LABELS = {
|
||||
cloud_database_public: '公网业务数据库',
|
||||
planning_database: '企划数据库',
|
||||
jiansun_database: '简尚业务数据库',
|
||||
product_information_database: '产品资料系统数据库',
|
||||
};
|
||||
|
||||
const DatabaseSettings = () => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user