【问题标题】:How to add data to request body while proxying it如何在代理时将数据添加到请求正文
【发布时间】:2017-04-22 05:13:06
【问题描述】:

我的客户打了一个电话,它传递了一些这样的帖子数据:

function doSomethingApi(email) {
  return axios({
    method: 'post',
    url: `/api`,
    data: {
      scan_refference: 'ref',
      user_email: email
    }
  })
}

在服务器端,这会被代理以应用某些机密:

app.post('/api', (req, res) => {
  const url = 'https://my.api.com';
  req.pipe(request({
    url,
    headers: {
      'Content-Type': 'application/json',
      Accept: 'application/json'
    },
    auth: {
      user: secrets.USERNAME,
      pass: secrets.PASSWORD
    },
    body: {
      value1: `${secrets.VALUE1}`,
      value2: `${secrets.VALUE2}`
    }
  })).pipe(res);
});

requestaxios 只是我使用的 2 个不同的 http 库,一个是客户端的首选,另一个是服务器的首选,仅此而已。现在的问题是我正在覆盖我的代理中的正文,我想简单地将 value1 和 value2 添加到从客户端传递的现有正文中。

【问题讨论】:

    标签: javascript node.js api express request


    【解决方案1】:

    首先从初始调用中获取正文作为 JSON 对象。这取决于您使用什么,但例如在 Express 中,您可以:

    app.use(express.bodyParser());
    

    然后

    var previousBody = req.body
    

    最后将初始 JSON 与您想要的任何内容合并(注意:这意味着您的客户端肯定无法使用“value1”和“value2”属性,因为它们将被覆盖)

    body: Object.assign(previousBody, {
      value1: `${secrets.VALUE1}`,
      value2: `${secrets.VALUE2}`
    })
    

    【讨论】:

    • 向项目添加正文解析器会挂起 api 调用,它们永远不会从挂起状态更新并最终超时
    • 那你可以手动操作stackoverflow.com/questions/6486208/node-js-parse-json-object 吗?只需确保代理仅传递初始请求中的结束事件即可。
    • 好吧,我设法让 req.body 工作并修复了 bodyParser 问题,但是,现在一旦我在请求选项中添加 body 参数,我就会从 express 收到 write after end 错误
    • 现在很难确切地知道代码的样子......但这可以帮助 - github.com/request/request/issues/1664 吗?
    • 他们也在使用我认为导致问题的管道,并修复它:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多