如何解决WSL2,无法在Windows浏览器上访问localhost nodejs服务器
我有使用子系统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浏览器访问服务器,请帮忙。
解决方法
如果您明确定义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放在浏览器中时,它可以正常工作。
,我的第一个想法是您遇到了NAT的WSL2接口问题(与默认情况下桥接的WSL1相反),但是由于以下原因,这并不完全适合您的问题:
-
您似乎获得了连接,但没有数据。如果最初没有连接,则只需从浏览器中获取“拒绝连接”即可。
无论如何, -
本地主机应该与NAT无关。
我不是Express方面的专家,但我认为您所看到的可能与此处使用的中间件有关。我相信,要使主体解析器正常工作,您可能需要解析POST,但是您的代码(和浏览器访问权限)仅提供GET方法。参见this question/answer for more details。
我认为您需要提供一种POST方法,并且需要使用诸如Postman或curl的工具进行测试。
如果您只想排除所有WSL2问题,请尝试Express "Hello,World"。
,您不需要在 Windows 端创建一个输入规则并打开该端口吗?进入安全高级设置并创建一个允许端口 5000 通过的输入规则。我正在使用 Windows 10 和 WSl2,并使用 NodeJS 和 Express —— 这就是我正在做的,并且它有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。