我有一个同构的反应应用程序,我想以某种方式在快速中间件之间传递状态。
我有以下处理表单提交的快速路线:
export const createPaymentHandler = async (req: Request, res: Response, next: NextFunction) => {
const { field } = req.body;
if (!paymentType) {
res.locals.syncErrors = { field: 'some error.' };
next();
return;
}
try {
const { redirectUrl } = await makeRequest<CreatePaymentRequest, CreatePaymentResponse>({
body: { paymentType },
method: HttpMethod.POST
});
res.redirect(redirectUrl);
} catch (err) {
error(err);
res.locals.serverError = true;
next();
}
};
下一个中间件负责处理渲染。
目前我正在使用res.locals
,有没有更好的方法或者公认的模式?
在我看来,你的问题更多是关于将一些数据传递给下一个中间件。由于渲染逻辑由下一个中间件处理,因此快速路由不应该关心数据的使用方式。你的方法看起来不错。
res.locals http://expressjs.com/en/api.html#res.locals是将数据传递到下一个中间件的推荐方式。来自文档:
此属性对于公开请求级别信息非常有用,例如请求路径名称、经过身份验证的用户、用户设置等。
此外,由于添加的变量的范围仅限于当前请求,因此数据仅在当前请求的生命周期内可用。也许你可以设定一个约定,添加一个state
键在res.locals
存储所有状态变量,但当前的方法也可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)