在角度文件上传,节点js上,req.body为空

时间:2016-09-22 12:14:04

标签: javascript angularjs node.js express

所以我一直在努力上传excel文件,然后将其保存到数据库中。所以这就是形式。

<form method="post" enctype="multipart/form-data">

   <label class="uk-form-file md-btn md-btn-primary" for="user_upload">Upload File</label>
        <input 
            style="display:none;"
            type="file" 
            ngf-select 
            ng-model="user_datasource" 
            name="userdatasource_upload" 
            id="userdatasource_upload"
            accept=".xlsx,.xls,.csv"
            ngf-max-size="20MB" 
            fd-input
            ng-change="upload"/>
 </form>

这是我的处理我上传的控制器

$scope.upload = function() {
  Upload.upload({
      url: '/api/sr/user_upload',
      data: {
         username: 'test',
         file: file_upload
      }
  }).then(function(response) {
     console.log(response);
  });      
}

这是我的节点

app.use(function(req, res, next) {
    res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET");
    res.header("Access-Control-Allow-Origin", "http://127.0.0.1:3000");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

app.post('/api/sr/user_upload',function(req, res) {
  console.log('============================================,');
  console.log(req);
}); 

所以你可以看到。我包括一切。 body-parsersetHeader等,但没有运气。 req.body为空。要上传文件,然后使用用户名将其保存到数据库。在我获得用户名后,我将使用multer请帮助我!谢谢!

1 个答案:

答案 0 :(得分:0)

当您在此基础上使用multer时,我正在撰写此答案

  

multer首先保存文件,然后写入req表单的剩余部分 - 可以说是隐藏字段。

所以你需要在upload函数中得到你的休息数据

upload(req, res, function(err) {
    if (err) {
        console.log(err);
        return res.end('Error');
    } else {
        console.log(req.body);
        req.files.forEach(function(item) {
            console.log(item);
            // move your file to destination
        });
        res.end('File uploaded to Destination');
    }
});

希望这对你有用