Express:无法使用中间件加载预期路径

时间:2019-05-23 10:58:12

标签: node.js reactjs express middleware

我是Express的初学者,我使用中间件实现了一个相当奇怪的功能。在这里,我调用由其中间件获取的URL,然后在next()上调用另一个中间件。现在,在第二个中间件的next()中,我需要加载该组件,但是问题是,在第一个中间件的next()之后,URL不会更改。

代码:

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 :(得分:0)

您的代码存在语法错误,可能值得首先解决,以查看它是否与您所遇到的错误有关:

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) {...}不会返回一个数值,因此不会触发链中的下一个中间件。

尝试:

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.
}