簡體   English   中英

erlang響應http請求以十進制而不是字母

[英]erlang response http request in decimal instead of letter

我開始在牛仔和Leptus中使用Erlang來創建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( https://github.com/s1n4/leptus )上的自述文件中的REST端點示例:

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。 因此,您可以使用:

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

Leptus似乎還希望您的字符串和JSON密鑰以及JSON字符串值作為二進制文件傳遞。 因此,如果您想返回一個簡單的輸出字符串,則可以使用以下命令:

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

通常,庫將使用二進制文件而不是標准的Erlang字符串,因為二進制文件比Erlang字符串列表更有效。

Erlang字符串是整數列表,因此您得到的正是您應該得到的(嗯,這種數據實際上可能是二進制字符串或列表字符串)。 關於在shell中查看響應的怪異現象是shell認為是格式化輸出的合適方法:作為字符串或列表。 如果存在任何ASCII“控制”字符或大於127的值,並且它認為它不在UTF-8語言環境中,則它將僅打印整數。

通常,如果您這樣做,可以肯定會得到字符:

Response = your_function(YourArgs),
io:format("Response:~ts~n", [Response]).

而不是僅僅依靠shell來將輸出格式化為stdio的默認方式(如果對環境有一點不確定性,它總是會退回到整數列表)。

將您的輸出粘貼到我的外殼中...

1> Z = [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].                                                       
"[\n    {\n      \"test\": \"hello\"\n    }\n  ]"
2> io:format("Using ~~ts:~n~ts~n~n"                                                 
2>           "Using ~~tw:~n~tw~n~n"
2>           "Using ~~tp:~n~tp~n~n",
2>           [Z, Z, Z]).
Using ~ts:
[
    {
      "test": "hello"
    }
  ]

Using ~tw:
[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]

Using ~tp:
"[\n    {\n      \"test\": \"hello\"\n    }\n  ]"

ok

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM