Проблема в том, что во втором примере console.log ('2') никогда не вызывается, и процесс загрузки изображений не слишком? (хотя он только вложенный).
Что может вызвать это?
upload.single('image')
это промежуточное ПО. Это означает, что когда вы вызываете ее, она просто возвращает другую функцию, и эта функция ожидает передачи req
, res
и next
в качестве аргументов.
Итак, что вы делаете с:
upload.single('image', () => {... });
Просто вернет функцию, которая никогда не вызывается, и никогда не будет вызывать переданный обратный вызов, потому что upload.single()
не предназначен для работы.
Если вы действительно хотите вызвать его вручную (что я не рекомендую), вам придется сделать что-то вроде этого:
app.post('/single', (req, res, next) => {
upload.single('image')(req, res, (err) => {
if (err) {
return next(err);
}
console.log('2');
res.status(200).send('File uploaded successfully.')
}),
});
Когда вы вызываете upload.single()
, чтобы получить функцию промежуточного программного обеспечения, а затем вызываете эту функцию и передаете ей нужный (req, res, next)
, но вы заменяете свой собственный обратный вызов на аргумент next
, а затем в этом обратном вызове вы проверяете, чтобы увидеть если промежуточное программное обеспечение next
было вызвано с ошибкой или нет, и продолжить, только если это не так.