如何让 "res.fields" 在我的应用程序中停止以 "undefined" 的身份返回?
How do I get "res.fields" to stop coming back as "undefined" in my application?
我正在开发一个使用 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 此处:
如 documentation 中所述,res.files
未定义,因为 multer 在 req
对象下填充了 files
。您需要将其更改为:
exports.resizeTourImages = (req, res, next) => {
console.log(req.files);
next();
};
我正在开发一个使用 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 此处:
如 documentation 中所述,res.files
未定义,因为 multer 在 req
对象下填充了 files
。您需要将其更改为:
exports.resizeTourImages = (req, res, next) => {
console.log(req.files);
next();
};