Javascript 对服务器侦听器的html href和fetch调用之间的差异

Javascript 对服务器侦听器的html href和fetch调用之间的差异,javascript,html,node.js,Javascript,Html,Node.js,我试图在单击菜单项时加载静态文件。因此,在我的例子中,“/map”将加载到private/index.html文件中。出于某种原因,当我使用href to'/map'标记a时,这行代码工作得非常好 app.use('/map', protect, express.static( path.join( __dirname, 'private/index.html' ) )); 当我尝试向菜单项添加事件侦听器而不是使用GET请求向“/map”添加标记时,节点服务器中的相同代码不会加载private

我试图在单击菜单项时加载静态文件。因此,在我的例子中,“/map”将加载到private/index.html文件中。出于某种原因,当我使用href to'/map'标记a时,这行代码工作得非常好

app.use('/map', protect, express.static( path.join( __dirname, 'private/index.html' ) ));
当我尝试向菜单项添加事件侦听器而不是使用GET请求向“/map”添加标记时,节点服务器中的相同代码不会加载private/index.html文件。我正在尝试使用javascript和fetch加载文件,以便能够访问protect中间件的响应,该中间件将检查用户是否登录

href和fetch进行此调用而不允许其工作的方式是否有差异。我对“/map”的fetch调用非常简单,请参见下文。我还尝试使用XMLHttpRequest

await fetch('/map');
是一个一次性安装的中间件,不希望以您在这里使用的方式调用它。此外,它需要文件夹的根路径,而不是文件,这样就可以通过直接URL访问所提供路径中的任何文件

听起来您在这里尝试的是呈现HTML页面,因此您不需要
静态
,您只需要将HTML页面作为请求的一部分发送回去:

app.get('/map', protect, (req, res) => {
  return res.sendFile('private/index.html');
});

如果您希望对呈现的HTML有更多的控制,那么我建议您查看一个。fetch将请求资源,但浏览器不会显示它。这是因为
fetch
用于在不离开当前页面的情况下从服务器加载数据。如果要导航到另一个页面/模拟正在单击的链接,必须使用
location=“/map”取而代之。谢谢你,詹姆斯!我结合了你和Chris G的评论。我还必须使用path.join和_dirname来获取根名称。谢谢你的帮助