Функция Show предоставляет json

Моя функция показа CouchDB не будет запускать функцию Provides('json',...). Однако в некоторых случаях он будет запускать HTML-код. Вот функция шоу:

function(doc, req) {
  provides('json', function(){
    return {'json': doc };
  });

  provides('html', function(){
    return "<html><body>html string here</body></html>";
  });

  return {'json': {
    'hello': "goodbye"
    } 
  };

}

Вот пример запроса при отправке text/x-json. hello:goodbye также возвращается, если я использую Accept: application/json

dave@ubuntu-laptop:~/py/liqc$ curl -i -H "Accept: text/x-json" http://127.0.0.1:8001/liqc/user-dave
HTTP/1.1 200 OK
Content-Length: 20
Vary: Accept
Server: CouchDB/1.0.2 (Erlang OTP/R14B)
ETag: "6V7EMSS64ZQ5SRLI0EYQVDWES"
Cache-Control: must-revalidate
Date: Mon, 27 Jan 2014 15:54:31 GMT
Content-Type: text/plain;charset=utf-8, text/x-json

{"hello":"goodbye"}

Когда я запрашиваю text/html, я также получаю hello:goodbye. Однако, если я удалю окончательный возврат функции show, application/json продолжит выдавать приветствие: до свидания, но text/html даст мне результаты, которые я хочу!

dave@ubuntu-laptop:~/py/liqc$ curl -i -H "Accept: text/html" http://127.0.0.1:8001/liqc/user-dave
HTTP/1.1 200 OK
Content-Length: 42
Vary: Accept
Server: CouchDB/1.0.2 (Erlang OTP/R14B)
ETag: "9B8K3XGK28Y7RL2ART28WLL50"
Date: Mon, 27 Jan 2014 16:02:41 GMT
Content-Type: text/html; charset=utf-8

<html><body>html string here</body></html>

Я делаю что-то не так или это что-то происходит с CouchDB? Я запускаю обратный прокси-сервер localhost для Cloudant BTW. Спасибо за любую помощь.


person DaveEdelstein    schedule 27.01.2014    source источник


Ответы (1)


Вы не должны использовать конечный return, если используете provides. return заменяет любой provides.

Кроме того, что вы ожидаете получить при запросе JSON, в то время как ваша функция show предоставляет JSON в двух разных местах? Используйте только provides и все будет хорошо.

Об этом:

Однако, если я удалю окончательный возврат функции show, application/json продолжит приветствовать меня: до свидания

Вы не сможете получить "hello":"goodbye", если полностью удалите окончательный возврат. Может быть, вы забыли обновить дизайн-документ? Отладка неправильного исходного кода может быть очень неприятной…

person Simon    schedule 28.01.2014
comment
Спасибо за ваш ответ! Из всех примеров, которые я видел, я не думал, что мне нужен возврат при использовании предоставления, но я застрял. Спасибо за подтверждение того, что здесь не должно быть возврата. Кроме того, я оговорился по поводу удаления возврата и получения приветствия: до свидания. На самом деле я получаю ответ с длиной содержимого 0, если я отправляю accept 'text/x-json' или 'application/json'. - person DaveEdelstein; 28.01.2014
comment
Зная, что возврат невозможен, я немного повозился со своей функцией предоставления JSON. если я предоставлю('json', function(){ return {'body':toJSON(doc)}; }); Это дает мне правильный тип контента и выводит документ! - person DaveEdelstein; 28.01.2014