在express中root后通过可选参数传递路由控制?

2024-05-13

我正在开发一个简单的网址缩短应用程序,并有以下快速路线:

app.get('/', function(req, res){
  res.render('index', {
    link: null
  });
});

app.post('/', function(req, res){
  function makeRandom(){
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for( var i=0; i < 3 /*y u looking at me <33??*/; i++ )
      text += possible.charAt(Math.floor(Math.random() * possible.length));
    return text;
  }
  var url = req.body.user.url;
  var key = makeRandom();
  client.set(key, url);
  var link = 'http://50.22.248.74/l/' + key;
  res.render('index', {
    link: link
  });
  console.log(url);
  console.log(key);
});

app.get('/l/:key', function(req, res){
  client.get(req.params.key, function(err, reply){
    if(client.get(reply)){
      res.redirect(reply);
    }
    else{
      res.render('index', {
        link: null
      });
    }
  });
});

我想删除/l/从我的路线(使我的网址更短)并使 :key 参数可选。这是执行此操作的正确方法吗:

app.get('/:key?', function(req, res, next){
  client.get(req.params.key, function(err, reply){
    if(client.get(reply)){
      res.redirect(reply);
    }
    else{
      next();
    }
  });
});

app.get('/', function(req, res){
  res.render('index, {
    link: null
  });
});

不确定我是否需要指定我的/路线是“下一个”路线。但因为我唯一的其他路线是我更新的帖子/路线,我想它会工作得很好。


这将取决于 client.get 在将 undefined 作为其第一个参数传递时执行的操作。

像这样的事情会更安全:

app.get('/:key?', function(req, res, next) {
    var key = req.params.key;
    if (!key) {
        next();
        return;
    }
    client.get(key, function(err, reply) {
        if(client.get(reply)) {
            res.redirect(reply);
        }
        else {
            res.render('index', {
                link: null
            });
        }
    });
});

在回调中调用 next() 没有问题。

根据this http://expressjs.com/guide.html#passing-route%20control,处理程序按照添加的顺序调用,因此只要您的下一个路由是 app.get('/', ...) 如果没有键,它就会被调用。

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

在express中root后通过可选参数传递路由控制? 的相关文章

  • Laravel 5.1 - 获取当前路线

    我正在开发一个为每个视图自动获取资源 css js 的函数 所以它工作得很好 让我们说 http mywebsite com displayitems http mywebsite com displayitems home about 等
  • npm WARN checkPermissions 缺少写入权限

    我一直在尝试解决在 Mac 上不使用 sudo 运行节点的问题 但我不断收到此消息 npm WARN checkPermissions Missing write access to Users myuser npm packages li
  • Webpack 如何构建生产代码以及如何使用它

    我对 webpack 很陌生 我发现在生产构建中我们可以减少整体代码的大小 目前 webpack 构建的文件大小约为 8MB main js 的文件大小约为 5MB 如何减少生产构建中的代码大小 我从互联网上找到了一个示例 webpack
  • 解密签名并验证 JWT

    我知道还有其他库可以让我更轻松地使用 JWT 在 Node js 中 在本例中 我使用 crypto js 以手动方式学习 JWT 以下给了我令牌 var header alg HS256 typ JWT var wordArrayHead
  • 跳过测试文件 Jest 中的一项测试

    我正在使用 Jest 框架并有一个测试套件 我想关闭 跳过其中一项测试 谷歌搜索文档没有给我答案 您知道答案或需要检查的信息来源吗 我在这里找到了答案 https devhints io jest https devhints io jes
  • Node.js 中的 SetTimeout 问题

    我有以下代码 它在 Chrome V8 下运行良好 但在节点内失败 var id id setTimeout TimeoutHandler 10 console log SET function TimeoutHandler clearTi
  • 获取与请求

    我正在使用 JSON 流并尝试使用 fetch 来使用它 该流每隔几秒发出一些数据 仅当流关闭服务器端时 使用 fetch 来使用流才可以访问数据 例如 var target the url var options method POST
  • Mongoose:保存时根据父字段值设置子文档字段值

    这几乎肯定在其他地方有所涉及 但是 如果我有一个带有嵌入子文档的单一架构 如下所示 var ChildSchema new Schema name type String trim true user type String trim tr
  • 使用 package.json 一起运行节点服务器和 webpack

    我通过学习此视频完成了待办事项应用程序 超级 MEAN 堆栈教程 Angular Node Express Webpack MongoDB SASS Babel ES6 Bootstrap https www youtube com wat
  • 在 NodeJs 中处理 Mongodb 全局连接的最佳方法是什么

    I using 节点 Mongodb Native https github com mongodb node mongodb native并尝试设置全局连接变量 但我对两种可能的解决方案感到困惑 大家能帮我看看哪一款比较好吗 1 解决方案
  • Gulp: /usr/local/bin/gulp: 没有这样的文件或目录

    每当我运行 gulp 时 都会收到以下错误 usr local bin gulp 没有这样的文件或目录 我已经关注了 SO 上几个相关问题的答案 但没有一个能解决我的问题 我已经使用 gulp 几个月了 没有任何问题 但不知何故搞砸了 我已
  • 如何使用nodeJS SFTP客户端列出所有子目录?

    有趣的节点 JS ssh2 sftp client 我想列出给定路径中的所有目录及其子目录 let sftp new ssh2SftpClient console log sftp sftp connect host xx xxx xxx
  • Node.js - Async.js:并行执行如何工作?

    我想知道 async js 中并行执行是如何工作的 async require async async parallel function callback for var i 0 i lt 1000000000 i Do nothing
  • heroku 上 phantomjs 的分页内部支持

    我有一个 NodeJS 应用程序 使用 PhantomJS 生成 PDF 文件 我的应用程序已部署到 Heroku 并且我正在使用this https github com stomita heroku buildpack phantomj
  • ReactJS 服务器端渲染与客户端渲染

    我刚刚开始研究ReactJS 发现它提供了两种渲染页面的方式 服务器端和客户端 但是 我不明白如何一起使用它 构建应用程序是两种不同的方法 还是可以一起使用 如果我们可以一起使用它 该怎么做 我们需要在服务器端和客户端复制相同的元素吗 或者
  • npm installexpress-generator 不安装express

    我正在遵循 MEAN 堆栈教程 该教程要求我安装 Express 我运行这个 npm install g express generator 这是我的结果 username username Inspiron 3521 npm instal
  • 在 Kubernetes 中连接前端和后端

    我的前端设置为 this http post
  • 如何创建不覆盖其他控制器路由的 Codeigniter 路由?

    我的 Codeigniter 应用程序中有很多控制器 例如 注册 个人资料 主要等 现在我想建立 User 控制器 我想要的是 如果人们访问网址 example com signup 我想使用默认路由到 Signup 控制器 如果人们访问网
  • 寻找在 gulp 中复制文件并根据父目录重命名的方法

    对于每个模块 我都有一些需要复制到构建目录的文件 并且正在寻找一种方法来最大限度地减少重复代码 gulp src client src modules signup index js pipe gulp dest build public
  • 如何列出特定服务器的所有成员?

    我的代码是 const list client guilds find id 335507048017952771 for user of list users console log user 1 username 这实际上没有任何作用

随机推荐

  • Laravel 中的支付网关回调时会话会自动销毁

    我正在尝试将 CCavenue com 支付网关集成到我的 Laravel 7 项目中 我面临的唯一问题是在回调 url 中 从支付网关获取发布数据后 活动会话会自动销毁 我还向中间件添加了 CSRF 例外 PayController 生成
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • 从 HList 获取元素

    我尝试了 HList 并按预期进行了以下工作 val hl 1 foo HNil val i Int hl 0 val s String hl 1 但是 我无法让以下代码正常工作 让我们暂时假设对列表进行随机访问是一个聪明的主意 class
  • 如何在 PuTTY 中保存并运行 Java 文件?

    我是 AWS 亚马逊网络服务 的新手 所以这可能是一个基本问题 我在 AWS 上创建了一个 EC2 实例 我有一台 Windows 计算机 因此我使用 PUTTY 来连接 Linux 实例 连接到我的 EC2 实例后 我使用以下命令编写 J
  • 如何比较两个对象数组并更改两个数组中找到的对象的值?

    假设我有两个对象数组 let array1 id 1 name snow id 4 name jo id 8 name bran id 12 name gondo id 13 name peter
  • 有没有办法获取 PHP 中可用区域设置的列表?

    在Java中 你可以调用Locale getAvailableLocales 获取可用区域设置的列表 我期待 PHP 的同等功能Locale http php net manual en class locale php类 但找不到 有没有
  • 如何对主索引重新编号

    我有一个简单的 MySQL 表 主索引 id 不是一一编号的 1 31 35 100 等 我希望它们的编号如 1 2 3 4 请告诉我该怎么做 我还想指出的是 我知道该操作可能产生的后果 但我只是想整理一下表格 我同意其他方法也可以 但我只
  • UITableView 无法一直滚动到底部[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只是好奇 我做了一些UITable
  • Bootstrap 3 在移动设备上滑入菜单/导航栏 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在构建一个基于浏览器的移动应用程序 我决定使用 Bootstrap 3 作为设计的 CSS 框架 Bootstrap
  • 将数据集导出到 EXCEL

    我使用以下代码将数据库表中的字段导出到 Excel 中 我想要做的是能够编写一条 SQL 语句从多个表中检索字段并将其导出到 Excel 中 这段代码只允许我导出一张表 另外 如何显示保存提示对话框 示例代码将不胜感激 非常感谢 prote
  • 当 Android 上的脸部靠近屏幕时,以编程方式关闭屏幕

    我的应用程序是一个拨号器 当用户将手机靠近头部时 我需要关闭屏幕并防止单击控件 就像本机 Android 拨号器行为一样 我需要什么 API 级别以及如何以正确的方式做到这一点 我通过反汇编一个非常著名的 VoIP 应用程序找到了解决方案
  • 我们如何在odoo中继承BaseModel类

    需要继承BaseModel类并添加一个新属性 例如 auto True register False name None columns constraints custom False defaults rec name None par
  • 计算网页内的字数

    我需要使用 python3 计算网页内的单词数 我应该使用哪个模块 网址库 这是我的代码 def web f urllib request urlopen https americancivilwar com north lincoln h
  • 如何在不加载关联模型的情况下检查 has_one 是否存在

    我有一个简单的 has one 关系 class User lt ApplicationRecord has one detail has many courses end class Detail lt ApplicationRecord
  • 无法删除临时文件夹(有时)

    当我启动应用程序时 我创建一个临时文件夹 public static File createTempDir String name throws IOException File tempDir File createTempFile na
  • 使用 getopt_long (C++) 如何为两个需要参数编写长选项和短选项?

    include
  • 有人知道 Drupal 7 的分面搜索解决方案吗?

    分面搜索模块不会被移动到 Drupal 7 我有什么选择 The 搜索API模块 http drupal org project search api是 Drupal 7 的新增功能 允许您从各种后端中进行选择 包括Solr http dr
  • 子视图的子层与更高的子视图重叠

    我有一个问题 我正在创建一个UIView这是从方法返回的 这部分很好 但我注意到 当我将子层添加到其中一个子视图时 这些层与子层添加的层次结构中较高的子视图 textView 和 imageView 重叠到testViewCopy出现在这些
  • 如何模糊视图

    I have a view having different colors I need to blur the background of that view for example There is LinearLayout in wh
  • 在express中root后通过可选参数传递路由控制?

    我正在开发一个简单的网址缩短应用程序 并有以下快速路线 app get function req res res render index link null app post function req res function makeR