sil*_*ter 16 routing node.js restify
嗨我有restify.io的路由问题
似乎restify不像"?"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){});
Run Code Online (Sandbox Code Playgroud)
所以当我跑步时,一切都按预期运作
http://localhost/users
Run Code Online (Sandbox Code Playgroud)
这显示了我的所有用户
http://localhost/users/1
Run Code Online (Sandbox Code Playgroud)
它显示id为1的用户
http://localhost/users/ //(note trailing slash)
Run Code Online (Sandbox Code Playgroud)
因找不到资源而失败,因为这个被解释为空参数而不是路由#1
我不想检查每个空参数并重定向或传递给下一个...
这似乎是一个普遍的事情,也应该击中其他人...所以你有什么看法,没有得到404的网址中的训练斜线
srq*_*inn 28
您需要restify.pre.sanitizePath()在代码的开头附近添加一些内容:
var restify = require('restify');
var server = restify.createServer();
server.pre(restify.pre.sanitizePath()); // Add this line
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看此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);
});
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)