У меня это до сих пор. Это работает, но я не могу не задаться вопросом, есть ли что-то менее взломанное.Как отправить запрос GET на бэкэнд koa, который будет возвращать условные результаты?
запрос GET:
http://localhost:3100/api/things?matches=%7B%22name%22%3A%22asdf%22%7D
декодируется: matches={"name":"asdf"}
- Я в принципе взять объект данных для запроса GET, сделать ключи имена параметров строки запроса и значение JSON.stringify
в качестве значения строки запроса.
Он работает .... но я чувствую, что, возможно, я могу сделать ее более гладкой с конечной точкой, как:
GET http://localhost:3100/api/things/match/:attr/:value
- но это очень ограничивает, как я могу иметь только одно условие. В то время как передача всего объекта выше, я могу сопоставлять несколько атрибутов.
На стороне Коа вещей, это не слишком много дополнительного кода (я использую Thinky для RethinkDB):
/**
* list
* list all things
* @param next
*/
ctrl.list = function *(next){
var matches = this.request.query.matches && JSON.parse(this.request.query.matches);
if (matches) {
var result = yield Thing.orderBy({index: "createdAt"}).filter(function(doc){
return doc('name').match(matches.name);
});
} else {
var result = yield Thing.orderBy({index: "createdAt"});
}
this.body = result;
yield next;
};
Если нет строки запроса, то он просто возвращает все результаты.
Я нахожусь на правильном пути здесь?
Я не знаю много koa, просто комментарий по вашему выбору конечной точки: если вы используете '/: attr /: value', вы не будете передавать несколько терминов запроса следующим образом:' ../matches/name/asdf/color/red/prop/value ... '?? Кажется .. неудобно. Разве не лучше было бы анализировать их как строки запросов? '../ matches? name = asdf & color = red & prop = val' – laggingreflex
Идея с подходом к строкам запроса состоит в том, что я мог бы передать несколько объектов фильтра как' matches = {name: 'asdf'} & where = {age: 18} 'etc и т. д. – chovy
Кажется, что, хотя хак, ваше решение, вероятно, является самым гибким. Вы просто хотите иметь уровень HTTP поверх своих моделей, или интерфейс будет более ограниченным? –