首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Body-Parser不读取请求体

Body-Parser不读取请求体
EN

Stack Overflow用户
提问于 2019-08-27 08:40:46
回答 3查看 1.8K关注 0票数 1

当我通过axios发送像FormData这样的请求时,body解析器不会读取参数。但是当我像json一样发送请求时,它会读出来。我使用表单数据,因为我发送了imageFile,所以我必须使用FormData。

另外,我使用的是快速验证器,它总是会出现错误,因为它不能读取参数.顺便说一句,我没有尝试用身体解析器来解析图像。我用穆特。我的问题是,除了图像,解析器不能读取参数.

Html部件:

代码语言:javascript
复制
let formData = new FormData();
formData.append("email", "1@gmail.com");
formData.append("name", "1");
formData.append("password", "12345678901");
let imagefile = document.querySelector('#uploadImg');
formData.append("myFile", imagefile.files[0])
let url = "http://localhost:8080/;
axios({url: url,
       data: formData,
       method: "Post",
       headers: {
            'accept': 'application/json',
            'Accept-Language': 'en-US,en;q=0.8',
            'Content-Type': `multipart/form-data`,
        }
    }).then(x => {
      console.log(x);
    })

Node.js部件:

代码语言:javascript
复制
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();
const { check, validationResult } = require("express-validator");
app.use(cors());

app.use(bodyParser.json());
app.use(
  bodyParser.urlencoded({
    extended: true
  })
);
app.use(bodyParser.text({ type: "text/html" }));

app.post(
  "/sa",
  [
    check("email", "Email Hatalı").isEmail(),
    check("name", "Name Hatalı").isLength({ min: 5 }),
    check("password", "Password Hatalı").isLength({ min: 10 })
  ],
  (req, res, next) => {
    console.log(req.body);
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      console.log(errors.mapped());
      return res.status(422).json({ errors: errors.array() });
    }
    res.send(200);
  }
);

快递-Validator错误输出:

代码语言:javascript
复制
{ email:
   { value: undefined,
     msg: 'Email Hatalı',
     param: 'email',
     location: 'body' },
  name:
   { value: undefined,
     msg: 'Name Hatalı',
     param: 'name',
     location: 'body' },
  password:
   { value: undefined,
     msg: 'Password Hatalı',
     param: 'password',
     location: 'body' } }

我这里只有一个问题。体解析器不解析请求并验证读取空参数.

EN

回答 3

Stack Overflow用户

发布于 2019-08-27 10:54:01

您使用的是FormData (mime类型multipart/form-data),body-parser不支持它

这不处理多个部分的身体,因为他们的复杂和典型的大型性质。对于多部分主体,您可能对以下模块感兴趣:

文档中的措辞可能有点混乱,因为大多数开发人员没有意识到表单数据是以multipart的形式传输的。

你有两个选择:

  1. 使用另一个模块来解析表单数据。我个人使用过formidable,但body-parser列出了一些可以工作的模块建议。
  2. 将请求发送为URL编码而不是表单数据: 设urlData = "";urlData += "email=1@gmail.com&";urlData += "name=1&";urlData += "password=12345678901&";urlData += "myFile“+ // well.这是有问题的

如果要使用URL编码的数据,则需要将图像数据转换为字符串。您可以使用base64编码来完成这一任务。在前端,您可以在canvas中绘制图像,然后使用canvas获取数据url。

然后,在服务器上,您必须将数据url转换回二进制缓冲区,但这很简单。

票数 1
EN

Stack Overflow用户

发布于 2019-08-27 08:45:18

要解决未定义的错误(来自快速验证程序),您的要求语句应该是顺序的,请您尝试使用此序列吗?

此require语句必须位于主体解析器行之后,因此在后面添加此语句

代码语言:javascript
复制
const { check, validationResult } = require("express-validator");

之后

代码语言:javascript
复制
app.use(bodyParser.text({ type: "text/html" }));
票数 0
EN

Stack Overflow用户

发布于 2019-08-27 09:44:54

您必须在使用快速验证器之前使用multer。

代码语言:javascript
复制
  var upload = multer({ dest: 'uploads/' }) // or whatever you config

app.post(
    "/sa", upload(xx), [ your validations ], ( req , res ....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57670772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档