是否有Erlang的Sinatra风格的Web框架?

时间:2010-01-18 08:13:20

标签: ruby-on-rails frameworks erlang sinatra

我在Ruby和Rails中编程了很长时间,然后我爱上了Sinatra框架的简单性,这让我可以构建一个页面的Web应用程序。

Erlang是否有像Sinatra这样的Web框架?我试过Erlyweb,但它看起来太重了。

5 个答案:

答案 0 :(得分:11)

你可以用mochiweb实现最小化:

start() ->
  mochiweb_http:start([{'ip', "127.0.0.1"}, {port, 6500},
                       {'loop', fun ?MODULE:loop/1}]).
                           % mochiweb will call loop function for each request

loop(Req) ->
  RawPath = Req:get(raw_path),
  {Path, _, _} = mochiweb_util:urlsplit_path(RawPath),   % get request path

  case Path of                                           % respond based on path
    "/"  -> respond(Req, <<"<p>Hello World!</p>">>);
    "/a" -> respond(Req, <<"<p>Page a</p>">>);
    ...
    _    -> respond(Req, <<"<p>Page not found!</p>">>)
  end.

respond(Req, Content) ->
  Req:respond({200, [{<<"Content-Type">>, <<"text/html">>}], Content}).

如果您需要高级路由,则必须使用正则表达式而不是简单的case语句。

答案 1 :(得分:3)

看看webmachine。它有一个非常简单但功能强大的调度机制。您只需编写资源模块,将URI指向它,并且您的服务自动符合HTTP标准。

答案 2 :(得分:3)

您可能需要查看Axiom(披露:这是我自己的项目)。它主要受到Sinatra的启发,建立在Cowboy之上,并提供了很多功能,Sinatra。

一个简单的例子:

-module(my_app).
-export([start/0, handle/3]).

start() ->
    axiom:start(?MODULE).

handle('GET', [<<"hi">>], _Request) ->
    <<"Hello world!">>.

这会处理GET /hi并返回Hello World!

查看README以获取其功能的文档。

答案 3 :(得分:2)

您可能对Rusty Klophaus'nitrogen框架感兴趣。它非常轻巧,非常适合真正动态的单页网站。

答案 4 :(得分:2)

可能是这个例子(参见REST SUPPORT)使用misultin,看起来像sinatra: