Подтвердить что ты не робот

Уточнить дополнительные параметры маршрута

Привет У меня проблема с routing с 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){});

Итак, все работает так, как ожидалось, когда я запускаю

1

http://localhost/users

который показывает всех моих пользователей

2

http://localhost/users/1 

который показывает пользователя с id 1

http://localhost/users/ //(note trailing slash)

не удается найти ресурс, потому что он интерпретируется как пустой параметр вместо маршрута # 1

Мне не нужна проверка на наличие пустых параметров на каждом и перенаправление или переход к следующему...

Это похоже на обычную вещь, которая также должна поразить других... так что вы берете на себя это, чтобы не получить 404 для тренировочных слэшей в URL-адресе

4b9b3361

Ответ 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