Node.js - Express.js URL 参数验证

Ale*_*ini 5 javascript node.js express

我是一个 node.js/express.js 新手。如何验证:id参数?我只想将数字传递给:id参数。如果:id是一个字符串或包含其中一个,我会显示一个 404 错误,如 zend 框架路由http://framework.zend.com/manual/current/en/user-guide/routing-and-controllers.html

/routes/users.js

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

/* GET users listing. */
router.get('/:id?/', function(req, res, next) {
  var id = req.params.id;
  if(id){
    res.render('single-users', { title: 'Single ' + id });
  }else {
    res.render('users', { title: 'All users' });
  }

});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

我试图改变

router.get('/:id?/', function(req, res, next)

router.get('/[0-9]+?/', function(req, res, next)

localhost:3000/users/ab/
Run Code Online (Sandbox Code Playgroud)

工作和显示single-users页面,我想要它..

卢卡斯·科斯塔提出的解决方案

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

/* GET users listing. */
router.get('/:id(\\d+)?/', function(req, res) {
  var id = req.params.id;

  if(id){
    res.render('single-users', { title: 'Single ' + id });
  }else {
    res.render('users', { title: 'All users' });
  }

});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

或者

router.get('/:id([0-9]+)?/', function(req, res)
Run Code Online (Sandbox Code Playgroud)

Luc*_*sta 4

您可以提供正则表达式:

router.get('/:id(\\d+)/', function (req, res, next){
    // body
});
Run Code Online (Sandbox Code Playgroud)

文档