formData通过http + post在angular + nodejs中

时间:2018-02-08 11:52:11

标签: angularjs node.js http-post

当我想通过http.post从我的角度客户端传递一些数据到我的节点服务器时,我遇到了一个问题。

这是事情,使用JSON.stringify(我的文本)传递文本工作正常,但鉴于我想传递文件+我的文本,我想使用formData。

当我尝试恢复服务器端的数据时,我的req.body是空的,我无法检索数据。

这是我的客户端代码:

[...]
var formData = new FormData();
        formData.append('name', product.name);
        formData.append('benefits_detail', product.benefits_detail);
        formData.append('sections', product.sections);
        formData.append('image', product.image);   // image is my file

            return this.http.post('http://localhost:3000/product', formData, {headers: headers}).map(........)

然后我的服务器,我试图恢复我的数据:

router.post('/', function (req, res, next) {

    console.log('req.body');
    console.log(req.body);
    console.log(req.body.formData);

...

这里的console.log是空的,如:{}

有人可以帮忙吗?

谢谢你

此致

2 个答案:

答案 0 :(得分:0)

看起来你没有使用任何正文解析中间件,这是必需的。

来自Express documentation for req.body

  

包含请求正文中提交的键值对数据。默认情况下,它是未定义的,并在使用正文解析器和multer等身体解析中间件时填充。

尝试使用body-parser

答案 1 :(得分:0)

要将图像上传到服务器,您可以尝试使用Ng File Upload指令。它有一个指令,用于在HTML中选择文件,然后将文件上载到服务器。如果您已经选择了图像,我相信您可以使用JS中的上传部分来发送图像(从未尝试使用HTML中没有文件选择器的上传,但它应该可以工作)。

但是,此解决方案要求您发送两个请求,一个用于数据,另一个用于图像。