не могу обновить клиента с положенным в Erlang - PullRequest
0 голосов
/ 07 декабря 2011

Я пытаюсь обновить клиента в моей базе данных riak, и я получаю сообщение об ошибке ниже: И я не знаю, что вызывает эту ошибку и что означает это сообщение об ошибке.

И модуль Iиспользуется:

allowed_methods(Request, State) ->
    {['PUT'], Request, State}.

content_types_accepted(Request, State) ->
    {[{"application/json",to_json}], Request, State}.

Ошибка

ошибка веб-машины: путь = "/ customer / cus / update" {error, {error, undef, [{customer_update, to_json, [{wm_reqdata, 'PUT', http, {1,1}, "127.0.0.1", {wm_reqstate, # Port <0.6513>, {dict, 4,16,16,8,80,48, {[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []}, {{[], [], [], [[mediaparams, {"charset", "UTF-8"}]], [], [[resource_module | customer_update], ['content-type', 116,101,120,116,47,104,116,109, 108]], [], [['content-encoding', 105,100,101,110,116,105,116, 121]], [], [], [], [], [], [], [], []}}}, не определено, "127.0.0.1 ", 'REQDATA', не определено, не определено, {wm_log_data, не определено, {1322,989559,450145}, 'PUT', {6, {" content-length ", {'Content-Length'," 121 "}, {"connection", {'Connection', "Keep-Alive"}, nil, nil}, {"content-type", {'Content-Type', "application / json; charset = UTF-8 "}, nil, {" host ", {'Host'," localhost: 8000 "}, {" allow ", {" Expect "," 100-Continue "}, nil, nil}, {"user-agent", {'User-Agent', "Apache-HttpClient / 4.0.1 (java 1.5)"}, nil, nil}}}}}, "127.0.0.1", "/ updatecustomer", {1, 1}, 404,0, не определено, не определено, не определено}}, [], "/ customer / cus / update", "// customer / cus / update", {dict, 0,16,16,8,80, 48, {[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []}, {{[], [], [], [], [], [], [], [], [], [], [], [], [], [], [],[]}}}, [], ".", 500,1073741824,67108864, [], [], {6, {"content-length", {'Content-Length', "121"}, {"connection", {'Connection'," Keep-Alive "}, nil, nil}, {" content-type ", {'Content-Type'," application / json;charset = UTF-8 "}, nil, {" host ", {'Host'," localhost: 8000 "}, {" allow ", {" Expect "," 100-Continue "}, nil, nil}, {"user-agent", {'User-Agent', "Apache-HttpClient / 4.0.1 (java 1.5)"}}, nil, nil}}}}}, not_fetched_yet, false, {1, {"content-type", {"Content-Type", "text / html"}, nil, nil}}, << >>, ["localhost"], 8000, []}, undefined]}, {webmachine_resource, resource_call, 3},{webmachine_resource, do, 3}, {webmachine_decision_core, resource_call, 1}, {webmachine_decision_core, accept_helper, 0}, {webmachine_decision_core, решение, 1}, {webmachine_decision_core, handle_request, 2},}}}}, webmachine_

Ответы [ 3 ]

4 голосов
/ 07 декабря 2011

Вы должны определить функцию to_json / 2.

Например:

to_json(RD, Result) ->
    {mochijson:encode(Result), RD, Result}.
0 голосов
/ 07 января 2012

Ключом к пониманию этой ошибки является часть:

{error, {error,undef, [{customer_update,to_json, ...

, которая сообщает об ошибке undef.Ошибки такого рода описаны в:

http://www.erlang.org/doc/reference_manual/errors.html#id81244

И вы можете видеть, что undef означает, что у нас есть неопределенная функцияОшибка связана с вызовом customer_update:to_json(..), который тогда не существовал.Вот в чем проблема у вас здесь.

0 голосов
/ 07 января 2012

К сожалению, мне не хватает репутации, чтобы комментировать ответ Ильи.

TLDR : префикс to_json с названием модуля, в котором вы его определили

Более длинный ответ:

Я определяю to_json в другом модуле

Глядя на ваш вызов content_types_accepted/2, вы не указываете, в каком модуле to_json находится,отсюда ошибка undef.Вызовы функций Erlang всегда являются MFA -> module: function (arguments), модуль можно опустить, только если функция находится в том же модуле.

См. Также документацию для пакетов Erlang

...