efene programming language

web hello world with mochiweb and simplebridge in erlang (and efene)

I was looking for examples on how to make a hello world web page using erlang, and since I couldn’t find it I made it myself. for this example we are going to use mochiweb and simplebridge

mochiweb: MochiWeb is an Erlang library for building lightweight HTTP servers.

simplebridge: SimpleBridge takes the pain out of coding to multiple Erlang HTTP servers by creating a standardized interface. It currently supports Mochiweb, Inets, and Misultin, with Yaws coming soon.

to use them we need to have them installed, so we are going to start downloading the code and compiling

# we create a folder for the example

mkdir erlweb

cd erlweb

# download simplebridge

git clone http://github.com/rklophaus/SimpleBridge.git



# compile it

cd SimpleBridge/

make



# back to the root directory

cd ..



# download mochiweb

svn checkout http://mochiweb.googlecode.com/svn/trunk/ mochiweb



# compile it

cd mochiweb/

make



# back to the root directory

cd ..



we have the needed components, let’s start with the example. create a hello.erl file and paste the code in it:

-module(hello).

-export([start/0, loop/1]).



start() ->

    Options = [{ip, "127.0.0.1"}, {port, 8000}],

    Loop = fun loop/1,

    mochiweb_http:start([{name, mochiweb_example_app}, {loop, Loop} | Options]).



response(Req, Root) ->

    simple_bridge:make_response(mochiweb_response_bridge, {Req, Root}).



response_ok(Req, Root, ContentType, Data) ->

    Response = response(Req, Root),

    Response1 = Response:status_code(200),

    Response2 = Response1:header("Content-Type", ContentType),

    Response3 = Response2:data(Data),

    Response3:build_response().



loop(Req) ->

    HTML = ["<h1>Hello, World!</h1>"],

    response_ok(Req, "./wwwroot", "text/html", HTML).

now open an erlang shell including the paths for the modules that we are going to use (mochiweb and simplebridge)

erl -pa ./mochiweb/ebin/ -pa ./SimpleBridge/ebin/

in the shell:

Eshell V5.7.4  (abort with ^G)

1> c(hello).

{ok,hello}

2> hello:start().

{ok,<0.42.0>}

now we open our browser pointing to http://localhost:8000/ and we should see the hello world obviously I’m going to make an efene version ;) but this time using ifene (the only difference with efene is that blocks are delimited using indentation instead of curly brackets)

@public
start = fn ()
    Options = [(ip, "127.0.0.1"), (port, 8000)]
    Loop = fn loop:1
    mochiweb_http.start([(name, mochiweb_example_app), (loop, Loop) : Options])

response = fn (Req, Root)
    simple_bridge.make_response(mochiweb_response_bridge, (Req, Root))

response_ok = fn (Req, Root, ContentType, Data)
    Response = response(Req, Root)
    Response1 = Response.status_code(200)
    Response2 = Response1.header("Content-Type", ContentType)
    Response3 = Response2.data(Data)
    Response3.build_response()

@public
loop = fn (Req)
    HTML = ["<h1>Hello, World!</h1>"]
    response_ok(Req, "./wwwroot", "text/html", HTML)

we save it as hello.ifn and compile the code

fnc hello.ifn

we run the example from an erlang shell (it’s easier;)

erl -pa ./mochiweb/ebin/ -pa ./SimpleBridge/ebin/

in the shell:

Eshell V5.7.4  (abort with ^G)

1> hello:start().

{ok,<0.42.0>}

now we open our browser pointing to http://localhost:8000/ and we should see the hello world


To Tumblr, Love Metalab