修改管理后台
This commit is contained in:
122
backend/fix-network-access.js
Normal file
122
backend/fix-network-access.js
Normal file
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* 网络访问问题修复脚本
|
||||
* 解决外部用户无法访问开发服务器的问题
|
||||
*/
|
||||
|
||||
const os = require('os');
|
||||
const net = require('net');
|
||||
|
||||
console.log('🔧 开始修复网络访问问题...\n');
|
||||
|
||||
// 获取网络接口信息
|
||||
function getNetworkInfo() {
|
||||
const interfaces = os.networkInterfaces();
|
||||
const results = [];
|
||||
|
||||
for (const name of Object.keys(interfaces)) {
|
||||
for (const iface of interfaces[name]) {
|
||||
if (iface.family === 'IPv4' && !iface.internal) {
|
||||
results.push({
|
||||
name: name,
|
||||
address: iface.address,
|
||||
netmask: iface.netmask,
|
||||
mac: iface.mac
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
// 检查端口是否可以监听
|
||||
function checkPortAccess(port) {
|
||||
return new Promise((resolve) => {
|
||||
const server = net.createServer();
|
||||
|
||||
server.listen(port, '0.0.0.0', () => {
|
||||
console.log(`✅ 端口 ${port} 可以监听所有网络接口`);
|
||||
server.close();
|
||||
resolve(true);
|
||||
});
|
||||
|
||||
server.on('error', (err) => {
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
console.log(`⚠️ 端口 ${port} 已被占用`);
|
||||
resolve(false);
|
||||
} else {
|
||||
console.log(`❌ 端口 ${port} 监听失败: ${err.message}`);
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 生成防火墙配置命令
|
||||
function generateFirewallCommands() {
|
||||
const commands = [
|
||||
'# Windows防火墙配置命令(以管理员身份运行PowerShell)',
|
||||
'',
|
||||
'# 允许Node.js通过防火墙',
|
||||
'netsh advfirewall firewall add rule name="Node.js Frontend" dir=in action=allow protocol=TCP localport=5300',
|
||||
'netsh advfirewall firewall add rule name="Node.js Backend" dir=in action=allow protocol=TCP localport=5350',
|
||||
'',
|
||||
'# 或者允许所有Node.js程序',
|
||||
'netsh advfirewall firewall add rule name="Node.js" dir=in action=allow program="C:\\Program Files\\nodejs\\node.exe" enable=yes',
|
||||
'',
|
||||
'# 检查现有规则',
|
||||
'netsh advfirewall firewall show rule name="Node.js Frontend"',
|
||||
'netsh advfirewall firewall show rule name="Node.js Backend"'
|
||||
];
|
||||
|
||||
return commands.join('\n');
|
||||
}
|
||||
|
||||
// 主函数
|
||||
async function runDiagnostic() {
|
||||
console.log('🔍 网络诊断开始...\n');
|
||||
|
||||
// 获取网络接口信息
|
||||
const networkInfo = getNetworkInfo();
|
||||
console.log('📡 可用的网络接口:');
|
||||
if (networkInfo.length === 0) {
|
||||
console.log(' ❌ 没有找到可用的网络接口');
|
||||
return;
|
||||
}
|
||||
|
||||
networkInfo.forEach(iface => {
|
||||
console.log(` - ${iface.name}: ${iface.address}`);
|
||||
});
|
||||
|
||||
// 检查端口访问
|
||||
console.log('\n🔌 检查端口访问:');
|
||||
const frontendPortOk = await checkPortAccess(5300);
|
||||
const backendPortOk = await checkPortAccess(5350);
|
||||
|
||||
// 提供访问建议
|
||||
console.log('\n💡 访问建议:');
|
||||
networkInfo.forEach(iface => {
|
||||
console.log(` 前端: http://${iface.address}:5300`);
|
||||
console.log(` 后端: http://${iface.address}:5350`);
|
||||
});
|
||||
|
||||
// 生成防火墙配置
|
||||
console.log('\n🔧 防火墙配置命令:');
|
||||
console.log(generateFirewallCommands());
|
||||
|
||||
// 提供解决方案
|
||||
console.log('\n📋 解决步骤:');
|
||||
console.log('1. 重启后端服务器: npm start');
|
||||
console.log('2. 以管理员身份运行PowerShell,执行上述防火墙命令');
|
||||
console.log('3. 让其他用户访问您的IP地址(不是localhost)');
|
||||
console.log('4. 确保其他用户和您在同一个局域网内');
|
||||
|
||||
if (!frontendPortOk || !backendPortOk) {
|
||||
console.log('\n⚠️ 端口被占用,请先停止其他服务');
|
||||
}
|
||||
|
||||
console.log('\n🎉 诊断完成!');
|
||||
}
|
||||
|
||||
// 运行诊断
|
||||
runDiagnostic().catch(console.error);
|
||||
Reference in New Issue
Block a user