我在 Windows 10 上使用 WSL2/Ubuntu-20.04 进行开发。我创建了一个基本的 Node+Express 服务器:
npm init -y; npm i express
// index.js
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
我curl http://localhost:3000/
使用 Windows 和 WSL/Ubuntu,都可以正常工作!太棒了。
我添加127.0.0.1 foobar.com
并C:\Windows\System32\drivers\etc\hosts
重新启动 WSL wsl --shutdown
,导致\\wsl.localhost\Ubuntu-20.04\etc\hosts
重新生成。我curl http://foobar.com:3000/
。它在 WSL/Ubuntu 中成功,但在 Windows 中失败curl: (7) Failed to connect to foobar.com port 3000 after 2040 ms: Connection refused
。我发现这很令人惊讶,因为我一直在构建一个维特应用程序并在那里更新我的hosts
文件。(npm create vite@latest
为了解决这个问题,我一直在测试。)
经过一番思考,我发现使用文件中的 WSL IP 地址hosts
(例如172.31.230.172 foobar.com
,使用 发现的wsl hostname -I
)可以让我从 Windows 访问我的 Node 服务器。但是,此更改会破坏我的 Vite 应用程序,并显示与之前的 Node 问题相同的错误消息。
以下是总结我的症状的表格。
代码 | 主办方 | 网址 | 视窗 | WSL/Ubuntu |
---|---|---|---|---|
节点 | 不适用 | http://localhost:3000/ |
✅ | ✅ |
维特 | 不适用 | http://localhost:5173/ |
✅ | ✅ |
节点 | 127.0.0.1 foobar.com |
http://foobar.com:3000/ |
❌ | ✅ |
维特 | 127.0.0.1 foobar.com |
http://foobar.com:5173/ |
✅ | ✅ |
节点 | 172.30.206.133 foobar.com |
http://foobar.com:3000/ |
✅ | ✅ |
维特 | 172.30.206.133 foobar.com |
http://foobar.com:5173/ |
❌ | ❌ |
理想情况下,我希望127.0.0.1 foobar.com
在我的 中使用hosts
,因为我的 WSL IP 可能会改变。不过我并不是太挑剔。