Javascript express.js路由中的参数类型
在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({
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应该做完全不同的事情(即创建资源和检索资源),那么让不同的函数处理它们是有意义的。我不确定这在你眼中是多么的不优雅。@OzgurGULapp.get(“*”,function(req,res){res.sendFile(uu dirname+“/path/to/index.html”)}
关于这个,我的index.html在哪里?我将服务器代码与前端代码分开。额外路由不是一个优雅的解决方案,我使用的是react-router@Jenny如果这两个URL应该做完全不同的事情(即创建资源和检索资源),那么让不同的函数处理它们是有意义的。我不确定这在你眼中是多么的不优雅。@OzgurGULapp.get(“*”,function(req,res){res.sendFile(uu dirname+“/path/to/index.html”)}
关于这个,我的index.html在哪里?我将服务器代码与前端代码分开。