Javascript express.js路由中的参数类型

Javascript express.js路由中的参数类型,javascript,node.js,express,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({

在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
,任何检查参数类型的方法?

您可以为它创建单独的路由。放置在
/ad/:id
路由之前,因为它将捕获所有请求,如
/ad/*

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

因为您提到要构建SPA,所以必须将所有GET请求重定向到react路由器:

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 */ })

您可以为其创建单独的管线。放置在
/ad/:id
路由之前,因为它将捕获所有请求,如
/ad/*

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

因为您提到要构建SPA,所以必须将所有GET请求重定向到react路由器:

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 */ })

为什么不在上面为/ad/create创建单独的路由?在这种情况下,如果它匹配,您的route/ad/:id将不会被触发,如果您将具有/ad/123,则不会触发create route。您有两个逻辑上不同的操作,因此它们应该位于不同的路由中,甚至使用不同的HTTP方法。为什么不使用
POST
来创建您的广告
GET
是因为检索资源而不是创建资源。为什么不在上面为/ad/create创建单独的路由?在这种情况下,如果它匹配,您的route/ad/:id将不会被触发,如果您将具有/ad/123,则不会触发create route。您有两个逻辑上不同的操作,因此它们应该位于不同的路由中,甚至使用不同的HTTP方法。为什么不使用
POST
来创建您的广告<代码>获取是因为检索资源而不是创建资源。额外路径不是一个优雅的解决方案,我使用的是react-router@Jenny如果这两个URL应该做完全不同的事情(即创建资源和检索资源),那么让不同的函数处理它们是有意义的。我不确定这在你眼中是多么的不优雅。@OzgurGUL
app.get(“*”,function(req,res){res.sendFile(uu dirname+“/path/to/index.html”)}
关于这个,我的index.html在哪里?我将服务器代码与前端代码分开。额外路由不是一个优雅的解决方案,我使用的是react-router@Jenny如果这两个URL应该做完全不同的事情(即创建资源和检索资源),那么让不同的函数处理它们是有意义的。我不确定这在你眼中是多么的不优雅。@OzgurGUL
app.get(“*”,function(req,res){res.sendFile(uu dirname+“/path/to/index.html”)}
关于这个,我的index.html在哪里?我将服务器代码与前端代码分开。