123 lines
3.7 KiB
JavaScript
123 lines
3.7 KiB
JavaScript
/**
|
||
* 网络访问问题修复脚本
|
||
* 解决外部用户无法访问开发服务器的问题
|
||
*/
|
||
|
||
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);
|