NodeJS-箭头函数未调用?

时间:2018-08-29 00:49:58

标签: node.js anonymous-function arrow-functions

我尝试将箭头函数拆分为两个,以尝试将一些外部变量传递给两者之间的内部变量(就范围而言)。

这是原始功能:

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')从未被调用过,图片上传过程不是吗? (尽管它只是嵌套的)。
可能是什么原因造成的?

谢谢。

1 个答案:

答案 0 :(得分:2)

  

问题是,在第二个示例中,console.log('2')从未被调用过,图片上传过程不是吗? (尽管它只是嵌套的)。   可能是什么原因造成的?

upload.single('image')是中间件。这意味着当您调用它时,它仅返回另一个函数,并且该函数期望作为参数传递reqresnext

所以,你在做什么:

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是否被错误调用,并且只有在没有错误时才继续。