- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Yaws 网络服务器构建 REST API,但我无法让 Yaws 将请求分派(dispatch)到我的模块。
-module(rest).
-include_lib("stdlib/include/qlc.hrl").
-include_lib("yaws/include/yaws_api.hrl").
-export([out/1, addAirport/4, handle/2]).
-compile(export_all).
-define(RECORD_TYPE, airport).
-define(RECORD_KEY_FIELD, code).
-record(airport,
{code, city, country, name }).
start() ->
application:start(mnesia).
do_this_once() ->
mnesia:create_table(airport, [{attributes,record_info(fields,airport)},{index, [country]}]),
mnesia:stop().
out(Arg) ->
Method = method(Arg) ,
io:format("~p:~p ~p Request ~n", [?MODULE, ?LINE, Method]),
handle(Method, Arg).
method(Arg) ->
Rec = Arg#arg.req,
Rec#http_request.method.
convert_to_json(Lines) ->
Data = [{obj, [{airport, Line#?RECORD_TYPE.code},
{city, Line#?RECORD_TYPE.city},
{country, Line#?RECORD_TYPE.country},
{name, Line#?RECORD_TYPE.name}]} || Line <- Lines],
JsonData = {obj, [{data, Data}]},
rfc4627:encode(JsonData).
addAirport(Code, City, Country, Name) ->
NewRec = #?RECORD_TYPE{?RECORD_KEY_FIELD = Code,
city = City,
country = Country,
name = Name},
io:format("~p:~p Adding Airport ~p~n",
[?MODULE,?LINE, NewRec]),
Add = fun() ->
mnesia:write(NewRec)
end,
{atomic, _Rec} = mnesia:transaction(Add),
NewRec.
handle('GET', _Arg) ->
io:format("~n ~p:~p GET Request ~n", [?MODULE, ?LINE]),
Records = do(qlc:q([X || X <- mnesia:table(?RECORD_TYPE)])),
Json = convert_to_json( Records),
io:format("~n ~p:~p GET Request Response ~p ~n", [?MODULE, ?LINE,
Json]),
{html, Json};
handle('POST', Arg) ->
{ok, Json, _} = rfc4627:decode(Arg#arg.clidata),
io:format("~n~p:~p POST request ~p~n",
[?MODULE, ?LINE, Json]),
Airport = rfc4627:get_field(Json, "airport", <<>>),
City = rfc4627:get_field(Json, "city", <<>>),
Country = rfc4627:get_field(Json, "country", <<>>),
Name= rfc4627:get_field(Json, "name", <<>>),
_Status = addAirport(Airport, City, Country, Name),
[{status, 201},
{html, Arg#arg.clidata}];
handle('PUT', Arg) ->
[IndexValue,_] = string:tokens(Arg#arg.pathinfo),
{ok, Json, _} = rfc4627:decode(Arg#arg.clidata),
io:format("~p:~p PUT request ~p ~p~n",
[?MODULE, ?LINE, IndexValue, Json]),
Airport = rfc4627:get_field(Json, "airport", <<>>),
City = rfc4627:get_field(Json, "city", <<>>),
Country = rfc4627:get_field(Json, "country", <<>>),
Name= rfc4627:get_field(Json, "name", <<>>),
NewRec = #?RECORD_TYPE{
?RECORD_KEY_FIELD = Airport,
city = City,
country = Country,
name = Name},
io:format("~p:~p Renaming ~p",
[?MODULE, ?LINE, NewRec]),
ChangeName = fun() ->
mnesia:delete(
{?RECORD_KEY_FIELD, IndexValue}),
mnesia:write(NewRec)
end,
{atomic, _Rec} = mnesia:transaction(ChangeName),
[{status, 200},
{html, IndexValue}];
handle('DELETE', Arg) ->
[IndexValue, _ ] = string:tokens(Arg#arg.pathinfo),
io:format("~p:~p DELETE request ~p",
[?MODULE, ?LINE, IndexValue]),
Delete = fun() ->
mnesia:delete(
{?RECORD_KEY_FIELD, IndexValue})
end,
Resp = mnesia:transaction(Delete),
case Resp of
{atomic, ok} ->
[{status, 204}];
{_, Error} ->
io:format("~p:~p Error ~p ",
[?MODULE, ?LINE, Error]),
[{status, 400},
{html, Error}]
end;
handle(Method,_) ->
[{error, "Unknown method " ++ Method},
{status, 405},
{header, "Allow: GET, HEAD, POST, PUT, DELETE"}
].
do(Q)->
F = fun() ->
qlc:e(Q)
end,
{atomic, Value} = mnesia:transaction(F),
Value.
最佳答案
您需要在 yaws.conf
文件的服务器配置部分将您的模块注册为 Yaws appmod
。请参阅Yaws appmod documentation获取必要的详细信息。
关于yaws - 使用 Yaws 的 REST API 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23290224/
我有一个 yaws 文件(比方说 a.yaws)里面有很多函数,我一次又一次地使用它们。所以我决定把这些通用函数放在另一个 yaws 文件中(比方说 common.yaws ) 并将此雅司病包含到 a
我正在尝试使用 Yaws 网络服务器构建 REST API,但我无法让 Yaws 将请求分派(dispatch)到我的模块。 -module(rest). -include_lib("stdlib/i
我想使用 Erlang 和 Yaws 网络服务器开发一些网络应用程序。但我在 Ubuntu Server 10.10 上设置 Yaws 时遇到问题。 首先我更新了我的 Ubuntu 系统: sudo
我需要帮助。我有一个工作网站。上线前的最后一步是更新 ssl 证书。由于那个版本的 erlang 中的错误,这并没有发生。我升级了 erlang,然后 erlang 和 yaws 驱动程序之间的代码级
我在 Ubuntu 19.04 上下载了 Yaws,克隆了 klacke 的项目,并配置了我的 /etc/yaws/yaws.config指向那个项目。 当我创建一个新的 .yaws文件和访问loca
每次新客户端使用其 Web 服务器时,我想知道 YAWS 中正在执行哪些代码... 首先,我试图了解 YAWS 如何处理并发用户...并尝试了以下 .yaws 页面: io:format("~nP
我正在努力为 Yaws 设置一个 yapp。任何人都可以提供文档链接或在此处复制粘贴一个简短示例吗? 抱歉,这是一个相当不具体的问题,但我或多或少迷失了:-) 谢谢, 简 最佳答案 假设您已经检查了
我对 erlang 和 yaws 很陌生。在玩弄了语言和简单的 yaws 功能(如 ehtml 和普通 appmods)之后,我尝试编写一个 yapp。我关注了http://yaws.hyber.or
Appmods 是一种让应用程序程序员控制 URL 路径的方法。它们被实现为 Erlang 模块。例如myappmod.erl -module(myappmod). -include("../../y
我正在测试脚本 upload2.yaws 在 Yaws 2.0 上,但不工作。该脚本是为 Yaws 1.57 开发的。 Yaws 的日志是: POST /html/upload2.yaws HTTP/
我正在使用 yaws(Erlang 框架)进行套接字通信。我可以使用 websocket_send 从服务器将消息发送回用户,但是我需要指定用户的 PID,这意味着我可以将消息发送回该用户。但是,我想
目前是否有任何简单的方法可以在 Apache Tomcat Servlet 容器前面设置 YAWS Web 服务器,类似于流行的 Apache httpd + Tomcat 设置? 最佳答案 我不相信
通常在 Erlang 中,程序员使用 ! 符号在并发编程中发送消息以接收,但我们如何在 yaws 中做到这一点?假设我正在尝试这样做> out(Arg) -> loop("bad"). loop(X
我正在尝试管理 Yast appmod。所以: 雅司病.conf: port = 8005 listen = 127.0.0.1 docroot = /home/ziel/www/
我在生产环境中将 YAWS 嵌入到我的应用程序中,并使用函数 yaws:start_embedded/4 来启动 YAWS。 下面是我的代码: Id = "my_server", GconfList
因为一切都应该是 https,所以我启用了它,并注意到 https 与 http 相比要慢得多。 我在达拉斯有一台 Ubuntu/YAWS 服务器。我使用“yaws --daemon --nodebu
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我对 YAWS 和 ERLANG 很陌生,想从不同的 .erl 文件调用一个函数到 YAWS 页面。 即,我有一个名为 pages.yaws 的页面,还有另一个名为 Utility.erl 的文件,并
以下是在 Mac OSX 机器上安装 YAWS(Yet Another Web Server)的分步指南。 它已经在 10.6.8 SL 上进行了测试并且运行良好,但如果您开始发送垃圾邮件 F5,则需
如何访问雅司病文件而不包含其扩展名?说, www.domain.com/listen.yaws => www.domain.com/listen 我在 yaws Documentation/appmo
我是一名优秀的程序员,十分优秀!