Основная проблема здесь:
.then(() => image.resize(500, 500, { fit: 'inside' }).toBuffer())
.then
должен принимать только функцию в качестве параметра, но вы передаете результат вызова toBuffer
on вызова image.resize
немедленно. Использование скобок для облегчения понимания группировки:
.then(
(() => image.resize(500, 500, { fit: 'inside' }))
.toBuffer()
)
Не на 100% уверен насчет соглашений здесь, но читатель кода (как я) будет , вероятно, , за исключением ссылки на fs
для ссылки на встроенный модуль fs
, чей метод writeFile
не возвращает Promise, так что использование .then
или await
на нем может привести к путанице - вы можете подумать, что он назвал его что-то вроде fsPromises
, или что-то похожее (только не fs
).
Возможно, было бы легче читать, используя async
/ await
:
const processImage = async (requestBuffer) => {
const image = sharp(requestBuffer);
const bigBuffer = await image.resize(1500, 1500, { fit: 'inside' }).toBuffer();
await fsPromises.writeFile('../image-md.jpg', bigBuffer);
const smallBuffer = await image.resize(500, 500, { fit: 'inside' }).toBuffer();
await fsPromises.writeFile('../image-sm.jpg', smallBuffer);
};
router.post('/submit', upload.single('file'), (req, res) => {
processImage(req.file.buffer)
.then(() => {
res.json({ success: true });
})
.catch((err) => {
res.status(400).json({ error: err.message })
});
});