我有使用子系统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浏览器访问服务器,请帮忙。
答案 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相反),但是由于以下原因,这并不完全适合您的问题:
您似乎获得了连接,但没有数据。如果最初没有连接,则只需从浏览器中获取“拒绝连接”即可。
本地主机应该与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 —— 这就是我正在做的,并且它有效。