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