Node.js Express app:如果存在cookie,则将CSS class添加到服务器端的元素中
我有一个快速的静态网站应用程序。 我用app.js中的cookie调用我的网站的翻译:
// i18n app.get('/hu', function (req, res) { // http://127.0.0.1:3000/hu res.cookie('locale', 'hu', { maxAge: 900000, httpOnly: true }); res.redirect('back'); }); app.get('/en', function (req, res) { // http://127.0.0.1:3000/en res.cookie('locale', 'en', { maxAge: 900000, httpOnly: true }); res.redirect('back'); });
如果有人访问http://127.0.0.1:3000/en
URL,则会存储调用翻译的Cookie。 hu
是默认的语言,当有人第一次访问我的网站时,没有存储任何cookie。
但是,如何在英文翻译处于活动状态时将CSS类添加到我的网站? 我有一个导航栏,中间是水平居中的标志。 在英语语言中,单词的长度不同,甚至导致居中的柔性盒元素left-nav | logo | right-nav
left-nav | logo | right-nav
left-nav | logo | right-nav
稍微不在中间。
不知怎么的,我想在app.js(在服务器端)添加一个CSS类到我的句柄模板中,当提供特定的cookie时。 可能吗?
是否有可能从app.js全局解决,而不是从路由器?
最后的解决scheme,谢谢你@ t.niese!
在app.js中:
app.use(function(req, res, next) { var defaultLang = 'hu'; var activeLang = req.cookies.locale || defaultLang; res.locals.langClass = activeLang + '-' + activeLang.toUpperCase(); next(); });
在我的车把模板中:
<!doctype html> <html class="no-js lang-{{langClass}}" lang="{{langClass}}">
您可以定义自己的中间件函数,根据locale
的cookie值将langClass
设置为您的模板值:
app.use(function(req, res, next) { var activeLang = req.cookies.locale || defaultLang; req.local.langClass = 'lang-'+activeLang; next(); });
那么你可以在你的模板中使用这个类作为类:
<html class="{{langClass}}"> </html>
你无法在全球范围内解决这个问题,因为那样每个访问者的语言都是一样的。
这个有可能。
你可以存储app.localsvariables所需的数据。
// i18n app.get('/hu', function (req, res) { // http://127.0.0.1:3000/hu res.cookie('locale', 'hu', { maxAge: 900000, httpOnly: true }); app.locals.lang = 'lang-hu'; res.redirect('back'); }); app.get('/en', function (req, res) { // http://127.0.0.1:3000/hu res.cookie('locale', 'en', { maxAge: 900000, httpOnly: true }); app.locals.lang = 'lang-en'; res.redirect('back'); });
在路由处理程序中,当前语言在app.locals
可用。
app.get('/', function(req, res) { var langClass = app.locals.lang; // Do something with variable });