📜  如何在 Node.js 中为 ExpressJS 路由器 url 设置正则表达式?

📅  最后修改于: 2022-05-13 01:56:53.944000             🧑  作者: Mango

如何在 Node.js 中为 ExpressJS 路由器 url 设置正则表达式?

ExpressJS 路由器是一个充当中间件的类,用于提供路由处理或确定应用程序如何响应客户端请求(各种 HTTP 方法)对特定 URI 的响应。

创建 Express App 并安装模块:

第 1 步:使用以下命令创建package.json

npm init

第 2 步:您可以访问链接 Install Express 以查看如何安装 express 模块。您可以使用以下命令安装此软件包:

npm install express

第 3 步:视图文件夹中创建app.jsparams.jsroutes.js文件。项目目录将如下所示:

项目结构

在 URL 中设置正则表达式:

我们可以通过以下两点轻松为我们的 Express Router 设置 Regex:

  • 为了使我们的路由与特定的正则表达式匹配,我们可以将正则表达式放在两个正斜杠之间,例如//
  • 由于每条路由都包含/ ,所以无论我们必须在 Regex 中使用/的任何地方,都在它之前使用反斜杠\ /

示例:在以下代码中,我们正在设置正则表达式,当接收到路由/home的 HTTP 获取请求时,将响应主页呈现给客户端。

router.get(/\/home/ , (req,res)=>{
    res.send('Homepage');
)

现在创建一个routes.js文件 这将包含使用 Regex 对不同路由的不同请求。

routes.js
// Requiring module
const express = require('express');
const router = express.Router();
  
// Route which matches /abc or /adc
router.get(/\/a[b|d]c/, (req, res) => {
    res.send("

Route First {     res.send("

Route Second {     res.send('

Route Third

') })    // Routes that must end with string "Hello"  // and can have any no. of any character  // before that router.get(/\/*Hello$/, (req, res) => {     res.send('

Route Fourth

') })    module.exports = router;


params.js
// Requiring module
const express = require('express');
const router = express.Router();
  
// Setting up regex for name and contact parameters
router.get('/user/:name([a-zA-Z]+)/:contact([6-9][0-9]{9})', (req, res) => {
    const name = req.params.name;
    const contact = req.params.contact;
    res.send({
        "username": name,
        "contact": contact
    })
})
  
module.exports = router;


app.js
// Requiring modules
const express = require('express');
  
const app = express();
const router = express.Router();
  
const route = require('./routes');
const param = require('./params');
  
// Using routers as middleware to
// use route.js and params.js
app.use('/', route);
app.use('/', param);
  
// Starting server on port 8000
app.listen(8000, () => {
    console.log("Server is listening on port 8000");
})


在 URL 参数中设置正则表达式:

要为 URL 参数设置正则表达式,我们可以在参数名称之后的括号内提供正则表达式。在以下文件中,我们为 URL 参数实现了正则表达式。

参数.js

// Requiring module
const express = require('express');
const router = express.Router();
  
// Setting up regex for name and contact parameters
router.get('/user/:name([a-zA-Z]+)/:contact([6-9][0-9]{9})', (req, res) => {
    const name = req.params.name;
    const contact = req.params.contact;
    res.send({
        "username": name,
        "contact": contact
    })
})
  
module.exports = router;

应用程序.js

// Requiring modules
const express = require('express');
  
const app = express();
const router = express.Router();
  
const route = require('./routes');
const param = require('./params');
  
// Using routers as middleware to
// use route.js and params.js
app.use('/', route);
app.use('/', param);
  
// Starting server on port 8000
app.listen(8000, () => {
    console.log("Server is listening on port 8000");
})

运行应用程序的步骤:使用以下命令运行app.js文件。

node app.js

输出:

  • 显示在routes.js文件中定义的所有路由的功能。

routes.js 的执行

  • 显示params.js文件中定义的路由的功能。

params.js 的执行