我尝试将箭头函数拆分为两个,以尝试将一些外部变量传递给两者之间的内部变量(就范围而言)。
这是原始功能:
app.post('/single', upload.single('image'), (req, res, next) => {
res.status(200).send('File uploaded successfully.')
});
这是新的,分裂的一个:
app.post('/single', (req, res, next) => {
upload.single('image', () => {
console.log('2');
res.status(200).send('File uploaded successfully.')
}),
});
问题是,在第二个示例中,console.log('2')从未被调用过,图片上传过程不是吗? (尽管它只是嵌套的)。
可能是什么原因造成的?
谢谢。
答案 0 :(得分:2)
问题是,在第二个示例中,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
是否被错误调用,并且只有在没有错误时才继续。