Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正文解析器不';不读取请求正文_Javascript_Node.js_Axios_Body Parser - Fatal编程技术网

Javascript 正文解析器不';不读取请求正文

Javascript 正文解析器不';不读取请求正文,javascript,node.js,axios,body-parser,Javascript,Node.js,Axios,Body Parser,当我通过axios发送FormData之类的请求时,主体解析器不会读取参数。但当我发送像json这样的请求时,它是这样的。我使用表单数据是因为我发送了imageFile,所以我必须使用表单数据 此外,我使用快速验证器,它总是给出错误,因为它不能读取参数。顺便说一句,我不尝试用主体解析器解析图像。我使用multer。我的问题是主体解析器不能读取除image之外的参数 Html部分: let formData = new FormData(); formData.append("email", "1

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

此外,我使用快速验证器,它总是给出错误,因为它不能读取参数。顺便说一句,我不尝试用主体解析器解析图像。我使用multer。我的问题是主体解析器不能读取除image之外的参数

Html部分:

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部分:

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);
  }
);
快速验证程序错误输出:

{ 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' } }
我这里只有一个问题。正文解析器不解析请求,验证读取空参数。

要解决未定义的错误(来自express validator),您的require语句应该按顺序排列,请尝试按此顺序排列好吗

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

const { check, validationResult } = require("express-validator");
之后

app.use(bodyParser.text({ type: "text/html" }));

您必须在express validator之前使用multer

  var upload = multer({ dest: 'uploads/' }) // or whatever you config

app.post(
    "/sa", upload(xx), [ your validations ], ( req , res ....

您使用的是
FormData
(mime类型
multipart/form data
),而
正文解析器不支持该类型:

这不处理多部分实体,因为它们复杂且通常较大。对于多部分实体,您可能对以下模块感兴趣:

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

你有两个选择:

  • 使用另一个模块解析表单数据。我个人使用了
    强大的
    ,但是
    主体解析器
    有一个可以工作的模块建议列表

  • 以URL编码而不是表单数据的形式发送请求:

    let urlData = "";
    urlData += "email=1@gmail.com&";
    urlData += "name=1&";
    urlData += "password=12345678901&";
    urlData += "myFile" + // well.. this is problematic
    
  • 如果要使用URL编码的数据,则需要将图像数据转换为字符串。您可以使用base64编码来实现这一点。在前端,您可以在
    canvas
    中绘制图像,然后使用canvas API获取数据url


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

    Express.js应用于任何文件传输。不能使用
    正文分析器
    传输文件。您还创建了内容类型
    多部分/表单数据
    ,并且
    主体解析器
    无法解析它。当我删除请求头部分和请求图像参数时,主体解析器仍然无法解析Express的可能重复项。js不支持
    多部分/表单数据
    。因此,您应该为JSON数据使用另一个端点,为您的文件使用另一个端点。但如果您仍然希望请求相同的端点,在客户端,您可以在json数据中拥有一个缓冲区属性。感谢您的建议,但仍然相同:(它不起作用我尝试了不上传图像,但仍然不起作用。我的问题是主体解析器无法解析请求。主体解析器不支持多部分表单数据请检查,主体解析器文档建议使用其他库解析多部分主体