主要问题:

如果它是由公共代理服务器创建的,我是否需要在每个内部微服务请求中传递标头才能将其包含在其他微服务中?

示例:

Structure:

enter image description here

在Nginx.conf:proxy_set_header X-Request-ID $request_id;

当我请求这些微服务中的任何一个时,我可以使用req.headers["x-request-id"]来获取标头值

但是,当我真的喜欢:

enter image description here

// calling ms2 from ms1
const response = await fetch("http://ms2/");

ms1米(第一跳),我可以像我之前展示的那样获得头球,但在ms2米我不能.

我知道Express服务器同时处理大量请求,这就是它的原因.但无论如何,当您每次都需要传递内部请求的头时,感觉很奇怪:

// calling ms2 from ms1
const response = await fetch("http://ms2/", {
    headers: {
      "X-Request-ID": req.headers["x-request-id"],
    },
});
// when do like this I can get the value in ms2.

有没有办法,或者说它就是这样?

推荐答案

如果您需要对ms1上的(A)特定端点的每个请求执行ms2的请求,您可以创建一个Express中间件,这样至少可以省go 每次手动执行请求的麻烦:

const makeMs2Request = async (req, res, next) => {
  const response = await fetch("http://ms2/", {
    headers: {
      "X-Request-ID": req.headers["x-request-id"],
    }
  );
  req.ms2data = await response.json();
  next();
});

app.get('/my/endpoint/on/ms1', makeMs2Request, (req, res) => {
  // here you can use `req.ms2data`
  …
});

Node.js相关问答推荐

Spotify Auth访问令牌给出错误代码400

请求正文未定义

如何从基于JSON的HTML/SCSS模板生成PDF?

构建期间 Docker 容器中的 npm 安装失败

在 Nest 项目上运行 Jest 测试时,我的文件无法找到一个在测试之外没有任何问题的模块

在构建完成后,将AddedFiles文件夹的内容复制到dist文件夹

当我try 从本地主机发布新产品时收到错误消息

如何从名字,中间名,姓氏中获取全名并在结果中搜索匹配?

在 Atlas 触发器(Node JS)中正确初始化 Firebase 管理 SDK

node.js 变量不存在代码块

安全沙箱并执行用户提交的 JavaScript?

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

所有的javascript回调都是异步的吗?如果不是,我怎么知道哪些是?

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

如何监控 node.js 上的网络,类似于 chrome/firefox 开发者工具?

使用 ES6 语法和动态路径导入模块

有人在 NodeJS 中实现过 wiki 吗?

Node.js, require.main === 模块

node.js 中存储的模块变量在什么范围内?

mongoose 填充与对象嵌套