feat(远程备份): 添加连接测试功能并优化协议切换逻辑
前端添加连接测试功能,使用 getFieldsValue 获取完整表单值并打印日志 后端实现 /remote/test 接口,支持协议自动推断和连接测试 优化协议切换时的表单重置逻辑,清空相关字段并设置默认路径
This commit is contained in:
@@ -798,6 +798,59 @@ router.delete('/remote/targets/:id', (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 直接测试远端连接(不保存,用于添加节点前的测试)
|
||||||
|
router.post('/remote/test', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const config = req.body;
|
||||||
|
console.log(`[RemoteBackup] 收到连接测试请求:`, JSON.stringify(config));
|
||||||
|
|
||||||
|
if (!config.host || !config.port || !config.username) {
|
||||||
|
return res.status(400).json({
|
||||||
|
success: false,
|
||||||
|
message: '请提供完整的连接信息(主机、端口、用户名)',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.protocol) {
|
||||||
|
const port = parseInt(config.port);
|
||||||
|
if (port === 22 || port === 2222) {
|
||||||
|
config.protocol = 'sftp';
|
||||||
|
} else if (port === 445 || port === 139 || port === 443) {
|
||||||
|
config.protocol = 'smb';
|
||||||
|
} else if (port === 80 || port === 443 || config.url) {
|
||||||
|
config.protocol = 'webdav';
|
||||||
|
} else {
|
||||||
|
config.protocol = 'ftp';
|
||||||
|
}
|
||||||
|
console.log(`[RemoteBackup] 推断协议类型: ${config.protocol} (基于端口 ${config.port})`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = await testRemoteConnection(config);
|
||||||
|
console.log(`[RemoteBackup] 连接测试结果:`, JSON.stringify(result));
|
||||||
|
|
||||||
|
if (result.success) {
|
||||||
|
res.json({
|
||||||
|
success: true,
|
||||||
|
message: '连接测试成功',
|
||||||
|
data: result,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
res.status(500).json({
|
||||||
|
success: false,
|
||||||
|
message: result.message,
|
||||||
|
error: result.error,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('[RemoteBackup] 测试远端连接失败:', error);
|
||||||
|
res.status(500).json({
|
||||||
|
success: false,
|
||||||
|
message: '测试远端连接失败',
|
||||||
|
error: error.message,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// 测试远端连接
|
// 测试远端连接
|
||||||
router.post('/remote/targets/:id/test', async (req, res) => {
|
router.post('/remote/targets/:id/test', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -293,8 +293,10 @@ const RemoteBackupSettings = () => {
|
|||||||
try {
|
try {
|
||||||
setTesting(true);
|
setTesting(true);
|
||||||
setTestStatus('testing');
|
setTestStatus('testing');
|
||||||
|
|
||||||
const values = await form.validateFields();
|
await form.validateFields();
|
||||||
|
const values = form.getFieldsValue(true);
|
||||||
|
console.log('[TestConnection] getFieldsValue(true):', JSON.stringify(values));
|
||||||
const response = await api.post('/backup/remote/test', values);
|
const response = await api.post('/backup/remote/test', values);
|
||||||
|
|
||||||
if (response?.success) {
|
if (response?.success) {
|
||||||
@@ -832,7 +834,20 @@ const RemoteBackupSettings = () => {
|
|||||||
placeholder="选择协议类型"
|
placeholder="选择协议类型"
|
||||||
size="large"
|
size="large"
|
||||||
onChange={() => {
|
onChange={() => {
|
||||||
form.setFieldsValue({});
|
form.setFieldsValue({
|
||||||
|
host: undefined,
|
||||||
|
port: undefined,
|
||||||
|
username: undefined,
|
||||||
|
password: undefined,
|
||||||
|
secure: undefined,
|
||||||
|
privateKey: undefined,
|
||||||
|
passphrase: undefined,
|
||||||
|
share: undefined,
|
||||||
|
domain: undefined,
|
||||||
|
url: undefined,
|
||||||
|
authType: undefined,
|
||||||
|
rootPath: '/',
|
||||||
|
});
|
||||||
setTestStatus(null);
|
setTestStatus(null);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user