express (using multer) Error: Multipart: Boundary not found, request sent by POSTMAN

前端 未结 3 799
忘掉有多难
忘掉有多难 2021-02-07 03:12

Notice: only when I use form-data body form in Postman (which is the form I have to use because I want to send files beside text fields), I get:

3条回答
  •  长情又很酷
    2021-02-07 03:41

    I am going to expand a little bit on user9150719 for those who are having the same issue with the frontend side of things and are wondering where to remove the headers.

    I had the same issue; I was trying to post from an Angular app to my Nodejs server. my post request included raw data and a file input. So I was thinking FormData()

    Angular Service

    //Declare header variables. 
    
    formDataHeader = {
            headers: new HttpHeaders({
              Accept: 'application/json',
              'Access-Control-Allow-Origin': '*',
              'Content-Type': 'multipart/form-data',
              Authorization: 'Bearer ' + this._myService.getToken()
            })
          };
    
    //Post function to Nodejs server
        addNewContact(contact: FormData): any {
    
            return this._httpClient.post(
              environment.apiBaseUrl + '/contacts', // POST /api/contacts
              (contact), // contact data,
              this.formDataHeader
            );
        }
    

    My formData was setup properly. I was able to get all the data, but the problem is that I had setup couple headers in my request that resulted in what user9150719 was experiencing.

    My solution was to simplify my headers to this:

    formDataHeader = {
            headers: new HttpHeaders({
              Authorization: 'Bearer ' + this._myService.getToken()
            })
          };
    

    Another important thing to point out is that I didn't need to set the enctype="multipart/form-data" on my

    tag.

    Even though I had an httpInterceptor setup (I don't think it is working properly), I still needed to add the Authorization header on all my requests, but all other headers were resulting in my api call to return unexpected results.

    Finally I think (but I am not entirely sure) that the reason why I didn't need to setup extra headers, is because in my NodeJS server, I already configured what headers to expect.

    Node.JS Server

    // app.js
    
    app.use('/public/uploads', express.static('uploads'));
    app.use('/public', express.static('public'));
    app.use(express.static(path.join(__dirname, 'public')));
    app.use(cors());
    app.use((req, res, next) => {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Headers', 'x-www-form-urlencoded, Origin, X-Requested-With, Content-Type, Accept, Authorization, *');
        if (req.method === 'OPTIONS'){
            res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, PATCH, DELETE, OPTIONS');
            res.setHeader('Access-Control-Allow-Credentials', true);
            return res.status(200).json({});
        }
        next();
    });
    app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
    app.use(bodyParser.json({limit: '50mb', extended: true}));
    

    So I think that if your server is setup to handle certain types of headers (Content-Type, Authorization, Origin, etc.), You don't necessarily need to set those headers again on your frontend when you send your request to the server. There are certain exceptions, such Authorization which in certain cases need to be set; probably because they carry some data in the form of token or something in that regards.

    I hope this helps someone out there!

提交回复
热议问题