Ответ 1
Вам нужно добавить restify.pre.sanitizePath()
где-то рядом с началом вашего кода:
var restify = require('restify');
var server = restify.createServer();
server.pre(restify.pre.sanitizePath()); // Add this line
Подробнее см. в Github Issue. В оригинальной статье 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