Express: не удалось загрузить намеченный путь с промежуточным ПО - PullRequest
0 голосов
/ 23 мая 2019

Я новичок в Express, и у меня довольно странная функциональность, которую я достигаю с помощью промежуточного программного обеспечения.Здесь я называю URL, который выбирается его промежуточным ПО, а затем на next() вызывается другое промежуточное ПО.теперь в next() второго промежуточного ПО мне нужно загрузить компонент, но проблема в том, что URL не меняется после первого промежуточного ПО next().

Код:

Express App: Маршрутизатор:

app.use('/common/global/login', mainHandler);
app.use('/common/*', subhandler, SuccessComponent);

Промежуточное ПО:

export function mainHandler(req, res, next) {
    const global-url= "someURL"
    if (global-url) {
        return fetch(global-url)
            .then((response) => response.json())
            .then((response) => {
                if (response.data) {
                    next();
                } else {
                    throw Error(response.statusText);
                }
            })
            .catch((error) => {
                res.redirect('/session-expired');
                next(error);
            });
    }
    res.redirect('/session-expired');
}

export function subhandler (req, res, next) {
    const other_url= "someOtherURL"

        return fetch(other_url)
            .then((response) => response.json())
            .then((response) => {
                if (response.data) {
// here it not loading the SUCCESSCOMPONENT as the URL still remains /common/global/login
                    return next();
                }
                throw Error(response.statusText);
            })
            .catch((error) => {
                next(error);
                res.redirect('/session-expired');
            });
    }
    res.redirect('/session-expired');
}

1 Ответ

0 голосов
/ 23 мая 2019

У вас есть синтаксическая ошибка с вашим кодом, возможно, стоит сначала исправить ее, чтобы посмотреть, не способствует ли это вашей ошибке:

export function mainHandler(req, res, next) {
    const global-url= "someURL"
    if (global-url) {
        return fetch(global-url)
        ...

Вы не можете определить переменную, которая содержит дефис-, поскольку это читается как оператор вычитания.

const global-url = ..., должно быть const global_url = ...

И, конечно, обновлять все экземпляры, где вы вызываете эту переменную.


В текущем состоянии вашего кода next() не вызывается первым промежуточным программным обеспечением, поскольку if (global-url) {...} не будет возвращать значение true, поэтому не запускает следующее промежуточное программное обеспечение в цепочке.

Попробуйте:

export function mainHandler(req, res, next) {
    const global_url= "someURL"
    if (global_url) {
        return fetch(global_url)
            .then((response) => response.json())
            .then((response) => {
                if (response.data) {
                    next();
                } else {
                    throw Error(response.statusText);
                }
            })
            .catch((error) => {
                res.redirect('/session-expired');
                next(error);
            });
    }
    res.redirect('/session-expired');
    // Note that if this 'if' is not satisfied, 'next()' is not called.
}
...