我想在hapijs中设置flash错误消息。我提到了这两个问题:
如何在Hapi JS中设置Flash消息?
Hapijs自定义500错误页
onPreResponse
:
server.ext("onPreResponse", (request, reply) => {
let response = request.response;
if (response.variety === "view") {
if (!response.source.context) {
response.source.context = {};
}
let flashError = request["yar"].get("error");
if (flashError) {
response.source.context["err"] = flashError;
}
}
然后在处理程序中,我使用request["yar"].set("error", err["message"]);
但是会话变量(err
)永远不会被清除。我试了request["yar".get("error", true)
和request["yar"].set("error","")
。这会导致视图在用户浏览屏幕时显示相同的错误。
我也尝试了request["yar"].flash()
,它给了我相同的结果。
如何设置flash/临时错误信息显示在视图中?
year .set()将设置正常会话数据,读取时不删除。您需要使用flash方法来存储和检索闪光灯。
flash(type, message, isOverride) -存储易失性数据-一旦读取就应该删除的数据。当没有指定参数时,它将返回所有flash消息并删除原始消息。当只给定一个类型时,它将返回该类型的所有flash消息并删除原始消息。当给定类型和消息时,它将设置该消息或将该消息追加到给定类型。'isOverride'用于指示所提供的消息应该替换任何现有值,而不是附加到它(默认为false)。
将flash存储在处理程序中:
request.yar.flash('error', err['message']);
并在其他地方检索所有'error'闪烁:
const allErrorMessages = request.yar.flash('error');