【问题标题】:Route parameters in Express JSExpress JS 中的路由参数
【发布时间】:2025-11-29 12:00:01
【问题描述】:

我正在使用 Express JS 处理路由 http://localhost:3000/location,它允许混合使用参数和固定端点。例如:

http://localhost:3000/location 是路由的根,它呈现位置列表的视图。

http://localhost:3000/location/map 为绘制在 web 地图上的位置列表呈现视图。

http://localhost:3000/location/:id 包含 URL 中给定位置 ID 的参数,调用时会呈现来自数据库查询的给定位置详细信息的视图。

'use strict';

var path = require('path');
var express = require('express');
var router = express.Router();

/* GET route root page. */
router.get('/', function(req, res, next) {
  // DO SOMETHING
});

/* GET the map page */
router.get('/map', function(req, res, next) {
  // DO SOMETHING
});

/* GET individual location. */
router.get('/:id', function(req, res, next) {
  // DO SOMETHING
});

module.exports = router;

这是处理具有混合固定值和参数化参数的路由的最佳做法吗?

更具体地说,当我调用“http://localhost:3000/location/SOMETHINGWRONG”时,例如,http://localhost:3000/location/:id被触发导致数据库查询错误,因为“SOMETHINGWRONG”不是整数,无法通过,如何正确处理?

【问题讨论】:

    标签: javascript node.js express routes


    【解决方案1】:

    您可以在路由中使用正则表达式限制规则,例如,如果您只希望接收整数,则可以使用如下内容:

    router.get('/:id(\\d{12})', (req, res) => {
    //...
    });
    

    如果符合规则,请输入方法,其中“id”是一个数字,12个字符

    仅验证数字:

    app.get('/:id(\\d+)', function (req, res){ 
    ...
    });
    

    【讨论】:

    • 谢谢!我将代码更改为您的答案。例如,当我调用“localhost:3000/location/579”时,它给了我一个 404 Not Found 错误。
    • 只验证数字,使用这个例子app.get('/:id(\\d+)', function (req, res){ // req.params.id is now defined here for you });
    【解决方案2】:

    为了更好地控制路由参数可以匹配的确切字符串,您可以在括号 (()) 中附加正则表达式。 例如:您的 ID 是一个整数,最大长度为 10 个字符

    /* GET individual location. */
    router.get('/:id([0-9]{1,10})', function(req, res, next) {
      // DO SOMETHING
    });
    

    【讨论】: