如何使用 multipart/form-data 获得多个 headers 表单请求

How can i get many headers form request with multipart/form-data

我正在制作一个通过 multipart/form-data 请求从客户端获取文件的系统。所以我需要两个 headers。一种用于文件(multipart/form-data 类型),一种用于 JWT(用于检查用户授权)(字符串类型)。但是当我尝试发送这两个 headers 时,我收到一条错误消息“错误:向对等方发送数据失败”

所以我尝试发送 multipart/form-data 内部的 JWT。(如下图所示)。

但是我在请求中找不到'x-jwt'(JWT 的密钥)属性。

如何使用 multipart/form-data.

获取多个 headers 表单请求

下面的代码是我试图从请求中获取 JWT 的 UploadMiddleware。

我正在使用 NestJs 和 multer 从客户端获取图像,并使用 Insomnia 来测试我的系统。

import { Injectable, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';
import { JWT_KEY } from 'src/auth/jwt/jwt.constant';
import { JwtService } from 'src/auth/jwt/jwt.service';
import { UserService } from 'src/user/user.service';

@Injectable()
export class UploadMiddleware implements NestMiddleware {
  constructor(
    private readonly jwtService: JwtService,
    private readonly userService: UserService,
  ) {}
  async use(req: Request, res: Response, next: NextFunction) {
    try {
      //JWT_key is 'x-jwt'
      if (JWT_KEY in req.headers) {
        const token = req.headers[JWT_KEY];
        const decodedToken = this.jwtService.verify(token.toString());
        if (
          typeof decodedToken === 'object' &&
          decodedToken.hasOwnProperty('id')
        ) {
          const getUser = await this.userService.findUser({
            id: decodedToken.id,
          });
          if (getUser.sucess) {
            req['user'] = getUser.user;
          }
        }
      }
    } catch (e) {
      console.error(e);
    }
    next();
  }
}

您正试图在一个中间件中做两件事。这不是一个好主意。因为当你需要在其他地方检查用户是否通过身份验证时,你需要将你的代码复制并粘贴到这个地方。这是一个糟糕的模式。相反,您应该创建单独的 middlewareguard(检查关于 guards). And this guard will check if user is authenticated or not. If it is then guard let request further. In other case guard throw Http exception 401 Unauthorized. As for file uploading you could use multer. About file uploading check corresponding section of nestjs doc(how to upload file nestjs doc 的 nestjs 文档)。