简体   繁体   English

Erlang Chicagoboss无法获得正确的JSON响应

[英]Erlang Chicagoboss unable to get the correct JSON response

In my controller file I have a method that reads the incoming HTTP request, reads the user data from the Database, encodes the result in JSON (using jsx) and sends it in response. 在我的控制器文件中,我有一个方法来读取传入的HTTP请求,从数据库中读取用户数据,将结果编码为JSON(使用jsx)并作为响应发送。

    sensorusersdetails('GET', []) ->
        Headers = [{'Access-Control-Allow-Origin', "*"},
        {'Access-Control-Allow-Methods',  "GET, OPTIONS"},
        {'Content-Type',  "application/json"},
        {'Access-Control-Allow-Headers', "X-Requested-With"},
        {'Access-Control-Max-Age', "180"}],   
        Building =  Req:query_param("bld"),
        io:format("User Data request from Node.js server~n~p~n", 
        [Req:query_params()]),
        {{Year,Month,Day},{_,_,_}} = erlang:localtime(),
        StrDate = lists:flatten(io_lib:format("~4..0w-~2..0w-~2..0w",
        [Year,Month,Day])),
        BUserDataList = boss_db:find(sensoruser_data, [{building, 'equals', Building}]),
        io:format("Current Users Data stored in the database: ~n~p~n",[BUserDataList]),

        MyUserJSONList = sensor_preapre_data(BUserDataList, StrDate),
        io:format("The Present Date Sensor Users Data with Binary 1: ~n~p~n",[MyUserJSONList]),
        MyUserJSONListLength = length(MyUserJSONList),
        if MyUserJSONListLength > 0 ->     
            MyFinalList = sensor_data_final(MyUserJSONList),
            io:format("The Present Date Sensor Users Data without Binary 2: ~n~p~n",[MyFinalList]),
            {200, [MyFinalList], Headers};
            %%{json, MyFinalList};
        true ->
            {200, "NO DATA FOUND", Headers}
            %%{json, [{error, "NO DATA FOUND"}]}
        end.        

In the Chicagoboss Server logs I'm getting: 在Chicagoboss服务器日志中,我得到:

The Present Date Sensor Users Data with Binary 1: 
[[<<"{\"username\":\"KPBatman1\",\"building\":\"A\",\"device\":\"Fitbit\",\"date\":\"2017-07-23\",\"calorie\":732,\"distance\":6.4399999999999995,\"elevation\":0,\"floor\":0,\"steps\":8}">>],
 [<<"{\"username\":\"KPSuperman1\",\"building\":\"A\",\"device\":\"Jawbone\",\"date\":\"2017-07-23\",\"calorie\":0,\"distance\":0.0,\"elevation\":0,\"floor\":0,\"steps\":0}">>]]

The Present Date Sensor Users Data without Binary 2: 
[["{\"username\":\"KPBatman1\",\"building\":\"A\",\"device\":\"Fitbit\",\"date\":\"2017-07-23\",\"calorie\":732,\"distance\":6.4399999999999995,\"elevation\":0,\"floor\":0,\"steps\":8}"],
 ["{\"username\":\"KPSuperman1\",\"building\":\"A\",\"device\":\"Jawbone\",\"date\":\"2017-07-23\",\"calorie\":0,\"distance\":0.0,\"elevation\":0,\"floor\":0,\"steps\":0}"]]

However, when I send the HTTP request - the JSON response I am getting: 但是,当我发送HTTP请求-JSON响应时,我得到了:

{"username":"KPBatman1","building":"A","device":"Fitbit","date":"2017-07-23","calorie":732,"distance":6.4399999999999995,"elevation":0,"floor":0,"steps":8}
{"username":"KPSuperman1","building":"A","device":"Jawbone","date":"2017-07-23","calorie":0,"distance":0.0,"elevation":0,"floor":0,"steps":0}

What is the correct way to send JSON response? 发送JSON响应的正确方法是什么?

However, when I send the HTTP request - the JSON response I am getting: 但是,当我发送HTTP请求-JSON响应时,我得到了:

 {"username":"KPBatman1","building":"A", ...} {"username":"KPSuperman1","building":"A", ...} 

And? 和? What did you expect/want to get? 您期望/想要得到什么?

The following code works for me because the output is what I expected to see: 以下代码对我有用 ,因为输出是我期望看到的:

-module(cb_tutorial_greeting_controller, [Req]).
-compile(export_all).

hello('GET', []) ->
    Headers = [
        {'Access-Control-Allow-Origin', "*"},
        {'Access-Control-Allow-Methods',  "GET, OPTIONS"},
        {'Content-Type',  "application/json"},
        {'Access-Control-Allow-Headers', "X-Requested-With"},
        {'Access-Control-Max-Age', "180"}
    ],   
    Data = [
        [<<"{\"username\":\"KPBatman1\",\"building\":\"A\"}">>],
        [<<"{\"username\":\"KPSuperman1\",\"building\":\"A\"}">>]
    ],
    Json = jsx:encode(Data),
    {200, Json, Headers}.

In my browser, I see: 在浏览器中,我看到:

[["{\"username\":\"KPBatman1\",\"building\":\"A\"}"],["{\"username\":\"KPSuperman1\",\"building\":\"A\"}"]]

Note that MyFinalList isn't even valid JSON: 请注意,MyFinalList甚至不是有效的JSON:

13> Data = [["{\"a\":\"Batman\"}"], ["{\"b\":\"Superman\"}"]].
[["{\"a\":\"Batman\"}"],["{\"b\":\"Superman\"}"]]

14> jsx:is_json(Data).
false

See what I did there? 看看我在那里做什么?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM