大家好 请问怎样才能用 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 20:56:31 +08:00
你的代码放错位置了吧。放在别的路由顶部。
|
2
pangtianyu OP @crs0910 #1 不好意思我不是很理解。。应该是放在哪里的。。我第一次搞这些东西。。
|
3
lrz0lrz 2017-10-30 21:23:13 +08:00 1
app.use 的先后顺序会有影响,把这个放在最前面
|
4
crs0910 2017-10-30 21:25:13 +08:00 1
```
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 21:26:27 +08:00
看看文档理解下,express 用一两次就很熟悉了,没几个 api
|
6
imherer 2017-10-30 21:26:53 +08:00
是要返回 lang 变量的值?还是 lang 变量对应语言的文本的值?
|
7
pangtianyu OP |
8
pangtianyu OP @crs0910 #4 我一开始看到在官方文档上面写着 app.use 里面 path 的 default 是 '/' 想着没有 specify path 的话只会在 root 有 request 的时候执行 结果发现我这个应该算是 middleware 是所有 request 都会执行的 😅
|