WSL2,无法在 Windows 浏览器上访问本地主机 Nodejs 服务器

Jan*_*rek 9 node.js express typescript vue.js wsl-2

我有 Windows 10 和 Linux 子系统 (Ubuntu-20.04),并且我正在使用 WSL2。当我初始化前端项目(vue 项目)并运行npm run serve时,一切正常。正如我所期望的,该应用程序在 localhost:8080 上运行。但是当我为这个应用程序创建后端(使用nodejs、express的新项目)时,我启动了简单的服务器,并且在终端中看起来不错,但是当我想在浏览器中进入 localhost:5000 查看基本的 Hello World 时,页面正在加载一段时间然后说网页本地主机没有发送任何数据。

这是我的 app.ts

import express, { Application, Request, Response, NextFunction } from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import 'reflect-metadata'

const app: Application = express()
const port = 5000

app.use(cors)
app.use(bodyParser.json({ limit: '20480kb' }))

app.get('/', (req, res) => {
    res.send('Hello!')
})

const server = app.listen(port, 'localhost', () => console.log(`The server is running on port ${port}.`))
Run Code Online (Sandbox Code Playgroud)

这是我的 package.json 脚本(将 typescript 编译为 javascript 效果很好):

"scripts": {
    "start": "nodemon dist/app.js",
    "build": "rm -rf dist/ && tsc -w",
    "commit": "npx git-cz"
  }
Run Code Online (Sandbox Code Playgroud)

这是我的后端终端,这里一切正常:

https://i.stack.imgur.com/pJIb9.png

我尝试使用 netstat 查看连接:

https://i.stack.imgur.com/n5naM.png

我的问题是我无法通过网络浏览器访问服务器,请帮忙。

lsa*_*aga 10

如果您显式定义 PORT 有效,我在尝试在 WSL2 上运行基本节点 - Express 应用程序时也会遇到同样的问题。基本上是一个网络问题,因此定义端口和主机为我解决了这个问题。这是代码。

const express = require('express');
const app = express();
const PORT = 3000;
const HOST = '0.0.0.0';

app.get('/', (req, res) => res.send('hello world'));
app.listen(PORT, HOST, () => console.log('server running'));
Run Code Online (Sandbox Code Playgroud)

当我在浏览器上输入 localhost:3000 时,它就可以工作了。

由于某种原因,当我更新 docker 桌面时,此方法失败了。另一个有效的解决方案是在 Windows 中打开端口。在具有管理员权限的 powershell 中:

netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=192.168.x.x
Run Code Online (Sandbox Code Playgroud)

在“connectaddress”中,您必须输入您的 IP (wsl2),您可以使用 ifconfig 获取该 IP

  • 将 PORT 和 HOST 添加到 app.listen() 解决了我的问题,谢谢! (2认同)