node.js - 为什么我的 nunjucks 页面没有被正确解释?
问题描述
在使用 express.js 的节点、js 应用程序中,我有一个中间件,它重定向到一个会话结束的页面,该页面在需要的地方用 nunjucks 编写。
重定向工作将页面输出为书面而不是html。出于某种原因,它不被认为是 nunjucks。
nunjucks.configure(['views',
path.join(__dirname, 'node_modules/govuk-frontend/'),
path.join(__dirname, 'node_modules/govuk-frontend/govuk/components/'),
path.join(__dirname, 'app/views/')
], {
autoescape: true,
express: app
});
const endSession = (req, res, next) => {
if (config.switchPage) {
res.render(__dirname + '/app/views/pages/session-ended.html');
return;
} else {
next();
}
};
app.use(endSession);
在其他地方,我用以下方式调用页面:
res.redirect('/decision/session-ended');
它工作正常。我已尝试将 sendfile 交换为重定向,但在页面上收到以下错误消息:
此页面无法正常工作
localhost 将您重定向了太多次。
尝试清除您的 cookie。
ERR_TOO_MANY_REDIRECTS
==== 附加信息 ====
这个中间件在这里开始:
const getApplicationRef = (req, res) => {
req.session.accessPage = '/decision/application-reference';
res.render('pages/application-reference', { appRef: req.session.appRef });
};
它调用:
const express = require('express');
const router = express.Router();
const { getApplicationRef, submitApplicationRef } = require('../../services/handler/application/application-ref-handler');
router.get('/', getApplicationRef);
router.post('/', submitApplicationRef);
module.exports = router;
获取应用程序引用 =
const getApplicationRef = (req, res) => {
req.session.accessPage = '/decision/application-reference';
res.render('pages/application-reference', { appRef: req.session.appRef });
};
下面是一些正确呈现页面的代码:
const getSecurityCode = (req, res) => {
if (req.session.appRef) {
req.session.accessPage = '/decision/security-code';
res.render('pages/security-code', { secCode: req.session.secCode });
} else {
res.redirect('/decision/session-ended');
}
};
解决方案
首先,您在问题中显示的代码根本不包含 nunjucks 代码,因此很难看出您希望在哪里使用 nunjucks。您没有在代码中向我们展示太多细节,因此我们只能提供一般性建议。
如果你想让 nunjucks 呈现页面,你需要调用res.render("yourtemplate")
,而不是res.sendFile(somefile)
你需要正确注册 nunjucks 作为你的模板引擎。
如果您正在使用res.redirect('/decision/session-ended');
,那么您需要一个适当的/decision/session-ended
调用路由res.render()
并且不会进行进一步的重定向,并且您需要确保该路由不会被您的中间件重定向(可能只是通过将该路由处理程序放在您的中间件之前)。
有关更多详细信息,请在此处显示从会话结束到涉及的所有请求的整个代码流。
推荐阅读
- flutter - 文档快照查询问题
- c# - 在哪里创建 HostBuilder 并避免“以下构造函数参数没有匹配的夹具数据”
- php - laravel 无法从映射为 docker 容器中的卷的目录加载视频
- image-processing - 八度音阶中的 conv2 显示白色图像
- java - 适用于 Ubuntu 18、Java 1.8 的 VowPal Wabbit
- android - 如何防止android键盘像vue中的ios一样向上推html布局?
- javascript - 单选按钮返回列表中的最终值
- spring-security - Hazelcast 社区版安全性
- c# - 如何实现数据库播种以使用 Entity Framework 进行测试
- android - BluetoothGattCharacteristic.value 返回空值