-1

无论我为节点使用哪个库,它们都需要绝对 URL。

这意味着我需要构建一个 fetch curry,然后通过函数链传递该 fetch 以便能够发出请求,或者我需要在确定我是在生产还是开发之后定义一个常量,然后更新该 URL每当我的环境发生变化时。

无论如何,为什么节点需要 URL 的主机名?

是否有更无缝的方式在我的应用程序中的任何位置(包括函数链深处)执行服务器端请求?

代码示例:

node index.js
index.js
let app = Express();
app.use('ace', (req, res) => foo());
app.use('somedata.json', (req, res) => res.status(200).send('{"hello": "world"}'));

foo.js
() => bar();

bar.js
() => bat();

bat.js
() => fetch('/somedata.json').then(console.log);
4

1 回答 1

1

没有相对 HTTP 请求这样的东西。任何实际的 HTTP 请求都必须是完全限定的 URL。这就是 HTTP 规范。因为 HTTP 是无状态的,所以没有与给定主机关联的“基本路径”状态。

相对请求存在于浏览器类型的环境中,但这只是因为浏览器会预处理请求,如果它不是绝对的,浏览器会添加默认的基本路径以使其成为绝对的。从浏览器到服务器的所有请求实际上都是绝对 URL。

您可以编写自己的函数来完成与浏览器相同的操作。您在其上设置一个基本路径,然后通过此函数引导所有请求,该函数检查为请求发送的 URL,如果它不是完全限定路径,则将基本路径添加到其中。

如果您展示了您要解决的问题的真实代码示例,我们可以为您提供更具体的帮助。如果它是开发或生产环境之一,那么您通常会在启动时建立一些变量,而不是您正在运行的环境类型,然后让您的代码在形成请求时使用这些变量。

于 2016-10-07T21:11:53.130 回答