WSL2,无法在Windows浏览器上访问localhost nodejs服务器

时间:2020-08-13 10:26:09

标签: node.js typescript express vue.js wsl-2

我有使用子系统Linux(Ubuntu-20.04)的Windows 10,并且正在使用WSL2。当我初始化前端项目(vue项目)并运行process_attributes(asset_id): let latest_attributes = fetch_latest_attributes(asset_id) let next_attributes = do_work(latest_attributes) let did_update_succeed = update_attributes_from_previous(asset_id, latest_attributes, next_attributes) if not did_update_succeed then // Try again from the beginning process_attributes(asset_id) 时,一切正常。如我所料,该应用程序在localhost:8080上运行。但是,当我为此应用程序创建后端(使用nodejs,express的新项目)时,我启动了简单的服务器,并且在终端中看起来还不错,但是当我想在浏览器中访问localhost:5000以查看基本的Hello World时,页面加载了一段时间然后说网页本地主机没有发送任何数据。

这是我的app.ts

update_attributes_from_previous

这是我的package.json脚本(将打字稿编译为javascript可以正常工作):

INSERT INTO asset_attributes (asset, attributes)
SELECT
  '92675e0c-7473-435f-b48e-8de1feb2164b' AS asset,
  '{ "foo": "bar" }'::jsonb AS attributes
WHERE 
  NOT EXISTS
    (
      SELECT id
      FROM asset_attributes
      WHERE asset = '92675e0c-7473-435f-b48e-8de1feb2164b'
    )
  OR 
  EXISTS 
    (
      SELECT id
      FROM
        (
          SELECT id
          FROM asset_attributes
          WHERE asset = '92675e0c-7473-435f-b48e-8de1feb2164b'
          ORDER BY created DESC, id
          LIMIT 1
        ) AS latest
      WHERE 
        id = 'fc114de7-93a2-44dc-be5c-92999caa0eb0' -- ID of latest asset_attributes at start of processing
    )
RETURNING id, created, asset, attributes ;

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

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

我尝试使用netstat查看连接:

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

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

3 个答案:

答案 0 :(得分:1)

如果您明确定义PORT的工作原理,则在尝试运行基本节点-WSL2上的Express应用程序时,我也会遇到相同的问题。基本上是网络问题,因此定义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放在浏览器中时,它可以正常工作。

答案 1 :(得分:0)

我的第一个想法是您遇到了NAT的WSL2接口问题(与默认情况下桥接的WSL1相反),但是由于以下原因,这并不完全适合您的问题:

  1. 您似乎获得了连接,但没有数据。如果最初没有连接,则只需从浏览器中获取“拒绝连接”即可。

  2. 无论如何,
  3. 本地主机应该与NAT无关。

我不是Express方面的专家,但我认为您所看到的可能与此处使用的中间件有关。我相信,要使主体解析器正常工作,您可能需要解析POST,但是您的代码(和浏览器访问权限)仅提供GET方法。参见this question/answer for more details

我认为您需要提供一种POST方法,并且需要使用诸如Postman或curl的工具进行测试。

如果您只想排除所有WSL2问题,请尝试Express "Hello, World"

答案 2 :(得分:0)

您不需要在 Windows 端创建一个输入规则并打开该端口吗?进入安全高级设置并创建一个允许端口 5000 通过的输入规则。我正在使用 Windows 10 和 WSl2,并使用 NodeJS 和 Express —— 这就是我正在做的,并且它有效。