NodeJS - функция стрелки не вызывается? - PullRequest
0 голосов
/ 29 августа 2018

Я попытался разделить функцию стрелки на две, чтобы попытаться передать несколько внешних переменных во внутреннюю переменную между двумя (с точки зрения области видимости).

Это оригинальная функция:

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 голосов
/ 29 августа 2018

Проблема в том, что во втором примере 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 было вызвано с ошибкой или нет, и продолжить, только если это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...