在express.js的路线中的param类型

时间:2017-09-09 08:20:42

标签: javascript node.js express

在express.js中,如果我在服务器端有这条路线

router.get('/ad/:id', (req, res) => {

    const { id } = req.params

    Ad.getAd(id, (err, resp) => {
        if(err){
            return handleError('Failed to load an ad', res)
        }

        res.json({
            success: true,
            result: resp
        })
    })
})

并且工作正常我想要加载一个详细广告,例如example.com/ad/123,其中id为123.但我不能再example.com/ad/create,是否可以检查参数的类型?

2 个答案:

答案 0 :(得分:4)

您可以为它创建单独的路线。放在/ad/:id路线之前,因为它会捕捉所有请求,例如/ad/*

router.get('/ad/create', (req, res) => { /* some work */ })
router.get('/ad/:id', (req, res) => { /* some work */ })

由于您提到要构建SPA,因此必须将所有GET请求重定向到react-router:

app.get("*", function (req, res) {
    res.sendFile(__dirname + "/path/to/index.html")
})

此外,您可以将api添加到所有后端端点,以防止出现歧义。

router.get('/api/ad/create', (req, res) => { /* some work */ })
router.get('/api/ad/:id', (req, res) => { /* some work */ })

答案 1 :(得分:0)

router.get('/ad/:id', (req, res,next) => {
  const { id } = req.params
  if(! parseInt(id,10)){
     return next();//skip this route if not a number
  }
  //its a number
});