node.js - 如何根据正则表达式指定的路径将路由器附加到 Express 应用程序?

标签 node.js express routes

使用这个非常简单的应用程序:

const express = require('express');

const app = express();
const router = express.Router();
const port = 8080;

router.get('/test', (req, res) => {
    res.send('Test was hit')
})

// binds router to express app
app.use('/root', router);

app.listen(port, () => logger.info(`Listening on port: ${port}`));

运行后curl http://localhost:8080/root/test ,毫不奇怪,响应是 Test was hit

我想让这个更加通用,并希望消费者能够点击 curl http://localhost:8080/<whatever-the-consumer-specifies>/test仍然访问路由器/test端点。

但是,如果我将绑定(bind)替换为如下:

app.use('/*',router);

后续点击后,响应为 Cannot GET /root/test

我怎样才能实现这个目标?

*编辑:*

我当然可以:

router.get('*/test', (req, res) => {
    res.send('Test was hit')
})

但是 - 这不是我寻求的答案,我只想在项目中进行一次此配置。

最佳答案

Express 允许在路由器中间件中使用正则表达式,如文档 here 中所述。 .

app.use(/\/\w+/, router);

您可以替换字符串并在第一个参数中放置正则表达式。

关于node.js - 如何根据正则表达式指定的路径将路由器附加到 Express 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57091151/

相关文章:

ruby-on-rails - Rails 命名空间与嵌套资源

ruby-on-rails - 使用 rspec 测试嵌套路由

node.js - Passport.js 和 Mongoose.js 在登录时填充用户 - 在 req.user 上丢失填充字段

node.js - 安装 graphql-tools 和 graphql-express 后。控制台中出现错误消息 'Cannot find name ' AsyncIterator'

node.js:找不到模块 'ico'

javascript - Node.js 在错误的文件路径上崩溃

php - 如何从 Symfony Controller 中的路由名称检索路由模式

node.js - 关闭 ubuntu 终端后 npm 会自行删除吗?

node.js - 使用 formData 获取 POST 在 Express JS 路由中为空

javascript - NodeJS - 如何将所有 console.log 写入文件?