Метод загрузки файла работает на локальном хосте, но в производственном процессе запрос POST возвращает «Cannot GET / Estabments / 1 / image».
Это мой роутер
routes.post(
'/establishments/:establishmentId/image',
multer(multerConfig).single('file'),
EstablishmentImageController.store
);
Это контроллер
class EstablishmentImageController {
async store(req, res) {
const { establishmentId } = req.params;
const establishment = await Establishment.findByPk(establishmentId);
if (establishment === null)
return res.status(404).json({ error: 'Not found.' });
if (establishment.image_url !== null)
return res
.status(403)
.json({ error: 'This establishment already have an image.' });
await Establishment.update(
{ image_url: req.file.filename },
{ where: { id: establishmentId } }
);
establishment.image_url = req.file.filename;
return res.status(200).json(establishment);
}
}
Это мультер конфигурация
import multer from 'multer';
import path from 'path';
import crypto from 'crypto';
export default {
dest: path.resolve(__dirname, '..', '..', 'tmp', 'uploads'),
storage: multer.diskStorage({
destination: (req, file, cb) => {
cb(null, path.resolve(__dirname, '..', '..', 'tmp', 'uploads'));
},
filename: (req, file, cb) => {
crypto.randomBytes(16, (err, hash) => {
if (err) cb(err);
const fileName = `${hash.toString('hex')}-${file.originalname}`;
cb(null, fileName);
});
},
}),
limits: {
fileSize: 2 * 1024 * 1024,
},
fileFilter: (req, file, cb) => {
const allowedMimes = ['image/jpeg', 'image/png'];
if (allowedMimes.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error('Invalid file type.'));
}
},
};
Я пытался переименовать папку tmp в другие вещи, пытался изменить ее место, переименовал маршрут ... Ничего не получалось. Что самое странное, это то, что кажется, что он даже не распознает маршрут, так как это запрос POST, но в ответе написано «Cannot GET». PS: работает на localhost .