
大家好 请问怎样才能用 Express.js 达到以下效果:
Client 访问一个网站任意页面后: 如果 cookie 已经有保存过偏好语言 比如说 en 那么 Server 就返回英语的文本 不然就 检测浏览器语言 比如说检测到 ja 存入 cookie 返回日语文本 我现在做到这样:
var lang = null; app.use(function(req, res, next) { lang = req.cookies.lang; if (!lang) { lang = req.acceptsLanguages('en', 'zh-cn', 'zh-hk', 'zh-sg', 'zh-tw'); switch (lang) { case 'zh-cn' || 'zh-sg': lang = 'zh-Hans'; break; case 'zh-hk' || 'zh-tw': lang = 'zh-Hant'; break; default: lang = 'en'; } res.cookie('lang', lang, {path: '/', httpOnly: true}); } next(); }); 问题是这个 function 好像只是作用在 '/' 上面 难道我要在每一个 url 的 router 上面都写一遍这些么 还是说有什么更加聪明的姿势
谢谢大家
1 crs0910 2017 年 10 月 30 日 你的代码放错位置了吧。放在别的路由顶部。 |
2 pangtianyu OP @crs0910 #1 不好意思我不是很理解。。应该是放在哪里的。。我第一次搞这些东西。。 |
3 lrz0lrz 2017 年 10 月 30 日 app.use 的先后顺序会有影响,把这个放在最前面 |
4 crs0910 2017 年 10 月 30 日 ``` var app = express() // 没有挂载路径的中间件,应用的每个请求都会执行该中间件 app.use(function (req, res, next) { console.log('我放在最前面,先过我这里。')) next() }) // 挂载至 /xxx 的中间件 app.use('/xxx', function (req, res, next) { console.log('我是路由 xxx') next() }) ``` |
5 crs0910 2017 年 10 月 30 日 看看文档理解下,express 用一两次就很熟悉了,没几个 api |
6 imherer 2017 年 10 月 30 日 是要返回 lang 变量的值?还是 lang 变量对应语言的文本的值? |
7 pangtianyu OP |
8 pangtianyu OP @crs0910 #4 我一开始看到在官方文档上面写着 app.use 里面 path 的 default 是 '/' 想着没有 specify path 的话只会在 root 有 request 的时候执行 结果发现我这个应该算是 middleware 是所有 request 都会执行的 |