WSL2, не удается подключиться к серверу nodejs localhost в браузере Windows

у меня Windows 10 с подсистемой Linux (Ubuntu-20.04), и я использую WSL2. Когда я запускаю проект внешнего интерфейса (проект vue) и запускаю npm run serve, все работает нормально. Приложение работало на локальном хосте: 8080, как я и ожидал. Но когда я создал бэкэнд для этого приложения (новый проект с nodejs, экспресс), я запустил простой сервер, и в терминале все выглядит нормально, но когда я хотел перейти в браузере на 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}.`))

Вот мои сценарии package.json (компилировать машинописный текст в javascript отлично работает):

"scripts": {
    "start": "nodemon dist/app.js",
    "build": "rm -rf dist/ && tsc -w",
    "commit": "npx git-cz"
  }

Вот мой бэкэнд-терминал, здесь все работает нормально:

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

Я попытался использовать netstat, чтобы увидеть соединение:

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

Моя проблема в том, что я не могу подключиться к серверу в веб-браузере, пожалуйста, помогите.


person Honza Vejnárek    schedule 13.08.2020    source источник
comment
Если вы попытаетесь открыть localhost:5000, что за ошибка? Я думаю, что могу помочь вам.   -  person Luis Paulo Pinto    schedule 21.08.2020
comment
Работает ли он с 127.0.0.1 явно вместо локального хоста?   -  person eirirlar    schedule 27.09.2020


Ответы (3)


если вы явно определяете, что ПОРТ работает, у меня та же проблема, когда я пытаюсь запустить базовое приложение Node Express на WSL2. в основном это проблема сети, поэтому определение PORT и HOST решает проблему для меня. Вот код.

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'));

делая это, когда я помещаю localhost: 3000 в свой браузер, он работает.

По какой-то причине, когда я обновил рабочий стол докера, этот метод не удался. Другое верное решение — открыть порт в Windows. в powershell с правами администратора:

netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=192.168.x.x

в «connectaddress» вы должны указать свой IP (wsl2), вы можете получить его с помощью ifconfig

person lsarteaga    schedule 07.10.2020

Моя первая мысль заключалась в том, что вы столкнулись с проблемой с интерфейсом NAT WSL2 (в отличие от WSL1, который был подключен по умолчанию), но это не совсем соответствует вашей проблеме, поскольку:

  1. Соединение вроде есть, а данных нет. Если бы он не подключался в первую очередь, вы бы просто получили сообщение об отказе в подключении из браузера.

  2. В любом случае у localhost не должно быть проблем с NAT.

Я не эксперт в Express, но я думаю, что то, что вы видите, может быть связано с вашим использованием промежуточного программного обеспечения. Я считаю, что для работы body-parser вам, вероятно, нужно анализировать POST, но ваш код (и доступ к браузеру) предоставляет только метод GET. См. этот вопрос/ответ для получения более подробной информации .

Я думаю, вам нужно будет предоставить метод POST, и вам нужно будет протестировать что-то вроде Postman или curl.

Если вам просто нужно исключить проблемы с WSL2, попробуйте Express Hello, World.

person NotTheDr01ds    schedule 16.08.2020

Разве вам не нужно создавать правило ввода на стороне Windows и открывать этот порт? Перейдите в «Дополнительные параметры безопасности» и создайте правило ввода, в котором вы разрешаете прохождение порта 5000. Я использую Windows 10 и WSI2, а также использую NodeJS и Express — и это то, что я делаю, и это работает.

person alernerdev    schedule 09.01.2021