如何从 Express 路由中的 URL 获取可选语言参数?

2024-02-02

我陷入了一个愚蠢的问题: 如何与optional区域设置参数?

那就是我的意思:

例如,我有首页 and contacts,这是路线:

app.get('/', frontpage.get);
app.get('/contacts', contacts.get);

现在我正在尝试向我的网站添加本地化

app.all('/:lang?*', language.all); -> detect and set locale
app.get('/:lang?', frontpage.get);
app.get('/:lang?/contacts', contacts.get);

唯一的问题是当我不在 URL 中使用 lang-parameter 时:

mysite.com/contacts

因为 Express 使用“联系人”作为语言参数。 (+我不喜欢这个复制粘贴的:lang?)

我想,我只是走错了路。

如何在 Express 中使用 URL 中的区域设置参数?

PS:我不想使用子域de.mysite.com或查询字符串mysite.com?lang=de。我想要这个变体mysite.com/de


大多数模块使用Accept-Language https://github.com/mozilla/i18n-abide所以我找不到任何使用您可能可以使用的路径的路径。因此,您需要定义自己的中间件,该中间件在其他所有事情之前进行初始化。快递的Router对你的用例并没有真正的帮助。

app.use(function(req, res, next){
    var match = req.url.match(/^\/([A-Z]{2})([\/\?].*)?$/i);
    if (match){
        req.lang = match[1];
        req.url = match[2] || '/';
    }
    next();
});

现在你可以使用req.lang在你的路由或其他中间件中配置你的翻译逻辑,由于我们重写了 URL,后面的逻辑将不知道有语言参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Express 路由中的 URL 获取可选语言参数? 的相关文章

随机推荐

  • 从 URL 获取外部页面的源 DOM/HTML

    我想从 Chrome 扩展程序中的 url 下载页面的源代码 我有这样的东西 但不知道如何将文本格式化为html 或者 如果这种格式有效 如何在控制台中显示源代码 fetch https www transfermarkt com robe
  • C++ 中的虚方法调用是如何工作的?

    如何虚拟方法调用在 C 中工作 通过虚拟表 读这篇文章 http en wikipedia org wiki Virtual table http en wikipedia org wiki Virtual table 我可以在这里解释 但
  • 将参数传递给 Asynctask

    我正在使用异步任务从菜单活动中获取字符串并加载一些东西 但我是 无法这样做 我是否以正确的方式使用它并且我是否正确传递参数 请查看代码片段 谢谢 private class Setup extends AsyncTask
  • 如何在reactstrap Dropdown中设置所选项目?

    如何在reactstrap Dropdown中设置所选项目 有一个下拉示例 https reactstrap github io components dropdowns https reactstrap github io compone
  • DryIOC 事件聚合器

    我正在尝试使用 DryIOC 实现事件聚合器 我有一个事件调度程序 如下所示 public class DryIocEventDispatcher IEventDispatcher private readonly IContainer c
  • 如何去除 javascript 中的所有 html 标签(有例外)?

    我长期以来一直在与这位正牌前任进行斗争 希望有人能提供帮助 基本上我有一个所见即所得字段 用户可以在其中键入格式化文本 但当然他们会复制并粘贴Word Web 等形式 所以我有一个 JS 函数来捕获粘贴上的输入 我有一个函数可以删除文本上的
  • 从哈希 perl 写入 CSV 文件

    我有一个程序 目前读取FILE 1类似于下面的并且匹配某些字符 例如 Type Fruit Description quantity tropical banana tasty and yummy 5 tropical grapefruit
  • 判断Lua编译器是运行32位还是64位

    我目前正在使用Windows在我的默认开发系统上和Linux在我部署 Lua 脚本的服务器上 为了Windows只有几个 32 位解释器 例如Windows 下的 Lua https github com rjpcomputing luaf
  • 有可用的 ccTalk 库吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将硬币接收器集成到我们的一个应用程序中 这个特定的硬币接收器使用ccTalk协议 http en
  • Firebase Blaze 计划和云功能

    不幸的是 Firebase 的 Flame 计划消失了 我现在必须处理 Blaze 计划 我不喜欢它 因为它的预算 无限 但我的钱包不是 昨天 我在编码时错误地创建了一个名为 3 Cloud Functions 的循环 我发现该循环的速度足
  • Visual Studio 意外停止调试且没有错误

    我正在调试一个项目 Visual Studio 停止调试并在以下行关闭程序 没有异常或错误消息 我已启用选项中任何引发的异常的通知 var query Session Linq
  • 使用 Maven 进行集成测试:在测试之前运行 jar,并在测试之后终止

    我有一个可运行的 jar 我想在集成测试开始之前在新进程中运行 在pre integration test 并在我的集成测试完成后终止它 在post integration test 我可以使用的东西之一是maven antrun 插件 h
  • 自定义 @font-face 无法在 chrome 中加载(chrome 自定义字体不渲染)

    custom font face无法在 chrome 中加载 chrome 自定义字体不渲染 使用 CSS 使用自定义字体 font face font family gotham rounded medium src url fonts
  • 如何在 fstream 文件之间切换而不关闭它们(同时输出文件) - C++

    我有一个 C 的小问题 无法通过在线浏览解决 这是我的代码 摘录 if File is open while File eof i getline File Line if i gt 2 Skip Headers int CharCount
  • 确定一个矩形是否被另一组矩形完全覆盖所需的算法

    我正在寻找一种算法来确定新矩形是否被一组现有矩形完全覆盖 问题的另一种方式是 新矩形是否完全存在于现有矩形覆盖的区域中 似乎有很多算法可以确定矩形重叠等 但我找不到任何可以解决这个确切问题的算法 矩形将使用 x y 坐标表示 这个问题与地理
  • 单元测试WCF方法

    我创建了一个 WCF 服务并尝试测试其中一种方法 我右键单击 WCF 服务方法并选择创建单元测试 它创建了一个新的测试项目并创建了一个单元测试 我尝试运行测试项目 但我不确定应该是什么UrlToTest价值 我已将 url 放入该服务 Te
  • python从具有相同方法名称的不同路径进行多重继承

    通过以下代码示例 可以super被使用 或者C必须打电话A foo and B foo明确地 class A object def foo self print A foo class B object def foo self print
  • 从午夜开始的日期时间到毫秒

    我怎样才能转换time给定的一部分DATETIME自午夜以来的毫秒数 例如 2011 08 29 00 00 00 gt 0 2011 08 28 00 00 00 gt 0 2011 08 29 01 00 00 gt 3600000 在
  • 我的 Eclipse 可以编译,但找不到 JDK!

    我不久前在 Windows 机器上安装了 Eclipse 几天前 我正在做一些 Java 编码 我注意到我没有 JDK 但 Eclipse 仍然可以编译和运行 Java 类 它包含编译器吗 是的 Eclipse 包含它自己的增量编译器 增量
  • 如何从 Express 路由中的 URL 获取可选语言参数?

    我陷入了一个愚蠢的问题 如何与optional区域设置参数 那就是我的意思 例如 我有首页 and contacts 这是路线 app get frontpage get app get contacts contacts get 现在我正