Node.js Express.js路由是否带有可选参数?
我有两种情况需要从数据库中获取数据Node.js Express.js路由是否带有可选参数?,node.js,express,Node.js,Express,我有两种情况需要从数据库中获取数据 显示正常数据 http://exampleapp.com/task/{{taskId}} 通过过帐编辑数据 http://exampleapp.com/task/{{taskId}}/?state={{app.state}} 两个url具有相同的http://exampleapp.com/task/{{taskId}与最后一个短语有点不同?state={{app.state} 我使用快速路由,如下所示: app.get('/task/:taskId/(
http://exampleapp.com/task/{{taskId}}
http://exampleapp.com/task/{{taskId}}/?state={{app.state}}
http://exampleapp.com/task/{{taskId}
与最后一个短语有点不同?state={{app.state}
我使用快速路由,如下所示:
app.get('/task/:taskId/(?state=:status(pending|cancel|confirmed|deleted))?', routes.task.show);
但我不知道为什么它不起作用
例如错误:转到h**p://exampleapp.com/task/51d2c53f329b8e0000000001时无法获取/task/51d2c53f329b8e0000000001根据,不能将RegExp路由与字符串路由混合使用
您应该这样做(我假设taskId
是一个整数):
但是,我不明白为什么您不能只检查路由中是否定义了req.query.state
。它可能不太容易出错,而且更容易:
app.get("/task/:taskId", function( req, res, next ) {
if (req.query.state) {
// Do things
}
next();
});
无法在路由中定义查询字符串。您可以从
req.query
访问查询字符串参数
app.get('/task/:taskId', function(req, res) {
if (req.query.state == 'pending') { ... }
});
但是,如果要修改任务,这不是适当的方法GET
请求应该是幂等的:请求不应该修改状态。这就是POST
请求的目的
app.get('/task/:taskId', function(req, res) {
// show task info based on `req.params.taskId`
});
app.post('/task/:taskId', function(req, res) {
// set task `req.params.taskId` to state `req.body.state`
});
您可以使用一个发布到任务的
,或者发出ajax请求:
$.post('/task/1', { state: 'pending' }, function() { ... });
您的问题是在路由中没有考虑查询字符串。您必须重新设计url(即,将状态包含到url本身中,而不是查询字符串中),或者在路由处理程序函数中检查查询字符串。您能详细介绍一下所看到的内容吗?我假设你实际上有两条路线,一条用于你需要支持的每种情况?你能把两者都拿出来吗?其中一个有效吗?在上面设置了路由器之后,当导航到时,我得到了一个错误:无法获取/task/51d2c53f329b8e0000000001,因为两个URL几乎相同,所以在使用查询状态修改代码后,我合并成了一个路由,它可以正常工作。ThanksI修改了我的代码,在从url获取查询字符串后使用put-to-update,现在可以使用了。无论如何,谢谢你的帮助
$.post('/task/1', { state: 'pending' }, function() { ... });