我有一条路由是这样的:

app.all('/path/:namedParam/*splat?',function(req,res,next){
  if(!req.params.length){
    // do something when there is no splat
  } else {
    // do something with splat
  }
});

然而,这是行不通的——如果我打path/foo/bar,它会到达路由,但如果我打path/foo,它不会.

有没有可能有一个可选的splat参数,或者我必须使用正则表达式来检测?

Edit:

更清楚地说,以下是我试图达到的要求:

  • 第一个和第二个参数是required
  • 第一个参数是静态的,第二个是命名的参数.
  • 可以附加任意数量的optional个附加参数,但仍然可以按路由运行.

推荐答案

这适用于express 4上的/path和/path/foo,注意?之前的*.

router.get('/path/:id*?', function(req, res, next) {
    res.render('page', { title: req.params.id });
});

Node.js相关问答推荐

如何使用Express正确跟踪服务器应用程序上的所有传出的Node.js请求

如何修复PostgreSQL和NodeJS/NestJS应用程序之间的日期时间和时区问题?

一个大型的单个 Redis 实例可以处理所有事情,还是多个 Redis 实例?

Rails 7导入npm yaml包时出现404错误

如何使用 Node.js 连接到 Cloud SQL?

遇到 - TypeError:try 使用 Express(Node.js) 从 JSON 文件访问数据时无法读取未定义的属性(读取帖子)

如何在mongoose 聚合中执行全文搜索

我如何保护nodejs中的路由

npm install 在 Mac 上的 Node-gyp 构建错误

图像存储在后端文件夹中,但使用 multer 和 react.js 在前端找不到

ESLint:TypeError:this.libOptions.parse 不是函数

为什么我的 Heroku Express API 数据是持久的,即使它只是来自一个变量

node_modules 中 .bin 文件夹的用途是什么?

使用 node.js 执行一个 exe 文件

Mongoose:查找、修改、保存

webpack css-loader 在外部样式表的 url() 引用中找不到图像

User.findOrCreate 函数是做什么的,什么时候在Passport 中调用它?

mongo 可以 upsert 数组数据吗?

Node.js 与 .net 中的异步/等待

react-native run-android 无法识别