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 });