[英]restify optional route parameters
嗨我有restify.io的路由問題
看起來好像不支持"?"
對於express.js的可選參數。
server.get('/users',function(req,res,next){});
server.get('/users/:id',function(req,res,next{});
// I even tried server.get('/users/',function(req,res,next){});
所以當我跑步時,一切都按預期運作
http://localhost/users
這顯示了我的所有用戶
http://localhost/users/1
它顯示id為1的用戶
http://localhost/users/ //(note trailing slash)
因找不到資源而失敗,因為這個被解釋為空參數而不是路由#1
我不想檢查每個空參數並重定向或傳遞給下一個...
這似乎是一個普遍的事情,也應該擊中其他人...所以你有什么看法,沒有得到404的網址中的訓練斜線
您需要在代碼開頭附近的某處添加restify.pre.sanitizePath()
:
var restify = require('restify');
var server = restify.createServer();
server.pre(restify.pre.sanitizePath()); // Add this line
有關更多詳細信息,請查看此Github問題 。 關於ReST的原始文件表明斜杠具有特殊含義,但是,ReST不是標准,只是指南。 因此,斜杠的使用/省略是API設計者的偏好和API的語義的問題。 一致性是唯一重要的事情。
我嘲笑並測試了您的設置,這已經確認可以解決您的問題,如下所述:
var restify = require('restify');
var server = restify.createServer();
server.pre(restify.pre.sanitizePath());
var users = [
{ id: 1, name: 'Sean' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Ana' }
]
server.get('/users', function (req, res, next) {
console.log(req.query());
res.send(users);
});
server.get('/users/:id', function (req, res, next) {
var user = users.filter(function (user) {
return user.id === req.params.id;
});
res.send(user);
});
server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});
HTTP測試:
$ curl localhost:8080/users <- Returns all users
$ curl localhost:8080/users/ <- Returns all users
$ curl localhost:8080/users/1 <- Returns user with id 1
$ curl localhost:8080/users?name=sean <- Logs querystring
$ curl localhost:8080/users/?name=sean <- Logs querystring
Restify在v4 +中為可選參數添加了支持,這些請求遵循與express相同的大綱:
router.get('/user/:id?', async (req, res, next)=>{
// Do Stuff
})
這意味着如果我們要向/user/
運行get請求,仍然會調用上述路由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.