3.3. Erlang

注意

Erlang 查询服务器默认情况下是禁用的。阅读 配置指南 了解原因以及如何启用它。

Emit(Id, Value)

key-value 对发射到视图索引器进程。

fun({Doc}) ->
    <<K,_/binary>> = proplists:get_value(<<"_rev">>, Doc, null),
    V = proplists:get_value(<<"_id">>, Doc, null),
    Emit(<<K>>, V)
end.
FoldRows(Fun, Acc)

用于迭代列表函数中所有行的辅助函数。

参数:
  • Fun – 函数对象。

  • Acc – 由 Fun 返回的先前值。

fun(Head, {Req}) ->
    Fun = fun({Row}, Acc) ->
        Id = couch_util:get_value(<<"id">>, Row),
        Send(list_to_binary(io_lib:format("Previous doc id: ~p~n", [Acc]))),
        Send(list_to_binary(io_lib:format("Current  doc id: ~p~n", [Id]))),
        {ok, Id}
    end,
    FoldRows(Fun, nil),
    ""
end.
GetRow()

从相关的视图结果中检索下一行。

%% FoldRows background implementation.
%% https://git-wip-us.apache.org/repos/asf?p=couchdb.git;a=blob;f=src/couchdb/couch_native_process.erl;hb=HEAD#l368
%%
foldrows(GetRow, ProcRow, Acc) ->
    case GetRow() of
        nil ->
            {ok, Acc};
        Row ->
            case (catch ProcRow(Row, Acc)) of
                {ok, Acc2} ->
                    foldrows(GetRow, ProcRow, Acc2);
                {stop, Acc2} ->
                    {ok, Acc2}
            end
end.
Log(Msg)
参数:
  • Msg – 以 INFO 级别记录消息。

fun({Doc}) ->
    <<K,_/binary>> = proplists:get_value(<<"_rev">>, Doc, null),
    V = proplists:get_value(<<"_id">>, Doc, null),
    Log(lists:flatten(io_lib:format("Hello from ~s doc!", [V]))),
    Emit(<<K>>, V)
end.

映射函数运行后,可以在 CouchDB 日志中找到以下行(例如,在 /var/log/couchdb/couch.log 中)

[Sun, 04 Nov 2012 11:33:58 GMT] [info] [<0.9144.2>] Hello from 8d300b86622d67953d102165dbe99467 doc!
Send(Chunk)

以单个字符串 Chunk 形式发送响应。

fun(Head, {Req}) ->
    Send("Hello,"),
    Send(" "),
    Send("Couch"),
    "!"
end.

上面的函数产生以下响应

Hello, Couch!
Start(Headers)
参数:

初始化 列表函数 响应。此时,可以定义响应代码和标头。例如,此函数重定向到 CouchDB 网站

fun(Head, {Req}) ->
    Start({[{<<"code">>, 302},
            {<<"headers">>, {[
                {<<"Location">>, <<"https://couchdb.cn">>}]
            }}
        ]}),
    "Relax!"
end.