我是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');
}
答案 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.
}