gpt4 book ai didi

rest - erlang 以十进制而不是字母形式响应 http 请求

转载 作者:可可西里 更新时间:2023-11-01 16:48:38 28 4
gpt4 key购买 nike

我开始将 Erlang 与 Cowboy 和 Leptus 结合使用来创建 REST API。

所以我只是尝试了一些简单的事情:

myapp_handler.erl

-module(myapp_handler).
-compile({parse_transform, leptus_pt}).
-export([init/3]).
-export([cross_domains/3]).
-export([terminate/4]).
-export([post/3]).

%% Cross Domain Origin
%% It accepts any host for cross-domain requests
cross_domains(_Route, _Req, State) ->
{['_'], State}.

%% Start
init(_Route, _Req, State) ->
{ok, State}.

post("/myRequest", Req, State) ->

Json = "[
{
\"test\": \"hello\"
}
]",

{200, {json, Json}, State}.

%% End
terminate(_Reason, _Route, _Req, _State) ->
ok.

启动服务器后,我尝试通过 curl 运行 POST 请求:

curl -X POST http://127.0.0.1:8080/myRequest --header "Content-Type:text/json"

请求的答案是:

[91,10,32,32,32,32,123,10,32,32,32,32,32,32,34,116,101,115,116,34,58,32,34,104,101,108,108,111,34,10,32,32,32,32,125,10,32,32,93]

所有数字都是来自 ascii 表的十进制字符值。但我想知道为什么请求的答案以数字而不是字母显示。我做错了什么吗?

提前致谢

最佳答案

我以前没有使用过 Leptus,但是,让我们看一下来自 Github 上自述文件的 REST 端点示例 (https://github.com/s1n4/leptus):

get("/", _Req, State) ->
{<<"Hello, leptus!">>, State};

get("/hi/:name", Req, State) ->
Status = ok,
Name = leptus_req:param(Req, name),
Body = [{<<"say">>, <<"Hi">>}, {<<"to">>, Name}],
{Status, {json, Body}, State}.

看来,如果您发布一个 {json, Term} 元组,它会自动将您的 Erlang 术语转换为 JSON。因此,与其手动制作 JSON,不如使用:

post("/myRequest", Req, State) ->
Json = [{<<"test">>, <<"hello">>}],
{200, {json, Json}, State}.

Leptus 似乎还希望您的字符串和 JSON 键以及 JSON 字符串值作为二进制文件传入。因此,如果您想返回一个简单的输出字符串,您可以使用以下内容:

post("/myRequest", Req, State) ->
{200, <<"hello">>, State}.

通常库会使用二进制文件而不是标准的 Erlang 字符串,因为二进制文件比 Erlang 字符串列表更有效。

关于rest - erlang 以十进制而不是字母形式响应 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29553516/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com