Express JS中的路径参数

时间:2018-07-02 23:21:14

标签: javascript node.js express routes

我正在使用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”不是整数并且无法通过?

2 个答案:

答案 0 :(得分:0)

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

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

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

仅验证数字:

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

答案 1 :(得分:0)

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

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