Javascript Express js将多部分表单数据发布到外部API

Javascript Express js将多部分表单数据发布到外部API,javascript,angularjs,express,post,requestjs,Javascript,Angularjs,Express,Post,Requestjs,我有一个angular应用程序和一个调用外部API的中间件express server $scope.uploadLayout = function(){ $scope.selectedTemplate.selected = $scope.items; var fd = new FormData() fd.append('name', $scope.template.name) fd.append('description', $scope.templat

我有一个angular应用程序和一个调用外部API的中间件express server

    $scope.uploadLayout = function(){
    $scope.selectedTemplate.selected = $scope.items;
    var fd = new FormData()
    fd.append('name', $scope.template.name)
    fd.append('description', $scope.template.desc)
    fd.append('file', $scope.template.file)
    $http.post('/layout/template',fd,{
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined}
    }).then(function(response){
        getLayoutRules()
        console.log("file uploaded successfully")
    })//add error callback
    console.log('test')
}
主要问题发生在express将数据发送到外部API时

  app.post('/layout/template', upload.any(), (req, res) => {
  // console.log(req.body.name);
  var formdata = new Buffer(req.files)
  var form = new FormData();
  form.append('name', req.body.name)
  form.append('description', req.body.description)
  form.append('file', formdata)
  console.log(form)
  var contentLength = req.files.length;
  var url = `${apiUrl}/layout/template`
  // var r = request.post(url,{
  //     headers: { 'Content-Type': undefined}
  // }, function optionalCallback(err, httpResponse, body) {
  //     if (err) {
  //         return console.error('upload failed:', err);
  //       }
  //       console.log('Upload successful!  Server responded with:', body);
  // })
  request({
    headers: {
      'Content-Length': contentLength,
      'Content-Type': 'multipart/form-data'
    },
    url:url,
    method:'POST',
    body: form
  },function(err,body,res){
    console.log(err)
    console.log(body)
  })

});
我已经检查了表单是否正确生成,但是外部API服务器给了我一个错误,说明

“由于未找到多部分边界,请求被拒绝”

请帮忙,还是有别的办法

更新

我稍微修改了代码,以发送从浏览器获取的请求头

app.post('/layout/template', upload.any(), (req, res) => {
  var header = req.headers['content-type']
  var formdata = new Buffer(req.files)
  console.log(formdata)
  var fd = new FormData();
  fd.append('name', req.body.name)
  fd.append('description', req.body.description)
  fd.append('file', formdata)
  //var contentLength = req.files.length;
  //console.log(contentLength)
  var url = `${apiUrl}/layout/template`
  //console.log(fd)
  // var r = request.post(url,{
  //     headers: { 'Content-Type': undefined}
  // }, function optionalCallback(err, httpResponse, body) {
  //     if (err) {
  //         return console.error('upload failed:', err);
  //       }
  //       console.log('Upload successful!  Server responded with:', body);
  // })
  request({
    headers: {
      'Content-Type': header
    },
    url:url,
    method:'POST',
    body: fd
  },function(err,body,res){
    //console.log(body)
    console.log(res)
  })
  //console.log(request)

});

因此,现在我发送由浏览器设置的相同边界,但java服务器未检测到表单参数

相同的错误,不同的堆栈:使用
formData:fd
而不是
body:fd
。看看,也试过了,运气不好