如何在代理时向请求正文添加数据

时间:2016-12-07 09:59:56

标签: javascript node.js api express request

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

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只是我使用的两个不同的http库,一个是服务器的客户端首选,这就是全部。现在的问题是我在我的代理中覆盖了body,因为我想简单地将value1和value2添加到从客户端传递的现有主体。

1 个答案:

答案 0 :(得分:1)

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

app.use(express.bodyParser());

然后

var previousBody = req.body

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

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