提问者:小点点

如何让“res.fields”在应用程序中不再作为“未定义”返回?


我正在做一个使用multer上传多个文件的项目。 为此,我在一个控制器文件中使用upload.fields,代码如下所示:

TourController.js

const multerStorage = multer.memoryStorage();

const multerFilter = (req, file, cb) => {
  if (file.mimetype.startsWith('image')) {
    cb(null, true);
  } else {
    cb(new AppError('Not an image! Please upload images only.', 400), false);
  }
};

const upload = multer({
  storage: multerStorage,
  fileFilter: multerFilter
});

exports.uploadTourImages = upload.fields([
  { name: 'imageCover', maxCount: 1 },
  { name: 'images', maxCount: 3 }
]);

在下一个函数中,我调整图像的大小,我console.log res.files,但它在终端输出中返回为未定义。 下面是我console.log res.files的代码。 它遵循我在上面贴出的代码:

exports.resizeTourImages = (req, res, next) => {
  console.log(res.files);
  next();
};

我尝试使用upload.array,但也无法使其按预期工作。 我不确定问题是否与应用程序的不同部分有关。 下面是函数出现在路由文件中的中间件堆栈中的位置:

tourroutes.js

router
  .route('/:id')
  .get(tourController.getTour)
  .patch(
    authController.protect,
    authController.restrictTo('admin', 'lead-guide', 'guide'),
    tourController.uploadTourImages,
    tourController.resizeTourImages,
    tourController.updateTour
  )

我不明白为什么我不能得到这份工作。 如果有用的话,我已经将所有的代码上传到GitHub:

https://github.com/ChristopherbClark/mynatours


共1个答案

匿名用户

如文档中所述,res.files未定义,因为multer将req-object下的文件填充。 您需要将其更改为:

exports.resizeTourImages = (req, res, next) => {
  console.log(req.files);
  next();
};