簡體   English   中英

解決可選的路由參數

[英]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){});

所以當我跑步時,一切都按預期運作

1

http://localhost/users

這顯示了我的所有用戶

2

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM