【问题标题】:How to grab FormData being passed from AJAX to NodeJS?如何获取从 AJAX 传递到 NodeJS 的 FormData?
【发布时间】:2016-06-27 12:58:17
【问题描述】:

我不确定客户端或服务器上的代码哪里出错了?如果我不发送 FormData(req.body 读取信息),它会起作用,但是一旦我将其更改为 FormData,因为我试图发送图片和一些字符串,我在标题的服务器端收到错误 500。长度控制台.log

使用我当前的正文解析器的 Req.body 不会提取 AJAX JS 请求发回的 FormData...

这是我的 JS 端:

var newProjectImage = $("#filebutton").get(0).files[0];
var formData = new FormData();
formData.append('picture', newProjectImage);
formData.append('title', newProjectTitle.trim());
$.ajax({
                    type: "POST",
                    url: "/adminAddProject",
                    data: formData,
                    cache: false,
                    dataType: 'json',
                    processData: false, // Don't process the files
                    contentType: false, // Set content type to false as jQuery will tell the server its a query string request

                    success: function (data) {
                        if(data) {
                          alert("Product added");
                          successAddProject(data);  
                          enableAddProjectButtons();
                        } else {
                          alert("data does not exist ");
                          enableAddProjectButtons();
                        }
                        console.log("the data returned is " + JSON.stringify(data));
                    }
                });

这是 NodeJS 端:

我的 app.js 有这些用于 body-parse:

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

那么路线是这样的:

router.post('/adminAddProject', function(req, res) {
    console.log("Called admin add " + JSON.stringify(req.body));

    if(req.cookies.token) {
console.log("Called admin token passes");
        if(req.body) {
            console.log("Called admin body is real ");
            var title;

            title = req.body.title;

            console.log("Called admin body is real " + title.length);

【问题讨论】:

标签: javascript jquery ajax node.js file-upload


【解决方案1】:

根据 BodyParser 的文档 - 对于多部分数据上传,您必须使用不同的模块,我选择了强大的。 https://github.com/expressjs/body-parser

var form = new formidable.IncomingForm({
          uploadDir: '_dirname',
          keepExtensions: true
        });

    // parse a file upload
    form.parse(req, function(err, fields, files) { })

【讨论】:

  • 成功了吗?我有同样的问题。您是否在客户端更改了某些内容?请告诉我,您的回答对我有用
猜你喜欢
  • 1970-01-01
  • 2013-12-18
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多