Led*_*ake 2 mysql node.js windows-subsystem-for-linux
我在 Windows 计算机上安装了 mySQL 服务器,还安装了 WSL,这样我就可以在 Windows 计算机上使用 Linux 的所有优点。我有一个任务是使用 Express 来创建一个连接到数据库的 JS api,所以我运行我的 mySQL 服务器,一切都运行正常,但是当我使用 WSL 启动 JS apinode index.js并尝试连接到数据库时,它会抛出一个错误sql错误
Server running on port 8080 , http://localhost:8080
/mnt/c/Users/ngkil/Documents/VSCode/WebDevAssignment2022/Backend/index.js:43
if (err) { throw err; }
^
Error: connect ECONNREFUSED 127.0.0.1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1195:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 3306,
fatal: true
}
Node.js v18.1.0
Run Code Online (Sandbox Code Playgroud)
如果我从 CMD 运行相同的命令,node index.jsAPI 工作正常
Server running on port 8080 , http://localhost:8080
Connected to database
Run Code Online (Sandbox Code Playgroud)
我不明白我的 mySQL 服务器和 WSL 之间出了什么问题,两者之间存在的唯一交互是我尝试从 WSL 连接到本地主机,这是一个 unix 问题吗???
Mot*_*oti 11
这不起作用,因为 WSL2 与 Windows 虚拟机平台(Hyper-V 的子集)创建的虚拟网络 (vNIC) 一起运行。在 WSL2 内部,localhost 是 vNIC 的地址。
最简单的解决方案是获取 Windows 的 IP 地址,并使用该地址而不是 localhost 连接到数据库。
不幸的是,每次运行 Linux 时 IP 都会改变。WSL 将您的 Windows 主机 IP 存储在/etc/resolv.conf文件中。所以你可以修改/etc/hosts为动态映射winhost到主机IP。要实现此目的,请在文件末尾添加以下行~/.bashrc:
export winhost=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
if [ ! -n "$(grep -P "[[:space:]]winhost" /etc/hosts)" ]; then
printf "%s\t%s\n" "$winhost" "winhost" | sudo tee -a "/etc/hosts"
fi
Run Code Online (Sandbox Code Playgroud)
然后运行:
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
现在改为localhost使用winhost. 请告诉我这是否对您有帮助
| 归档时间: |
|
| 查看次数: |
2921 次 |
| 最近记录: |