Nitrogen 學習過程實錄(8)

2021-04-24 17:14:39 字數 1838 閱讀 4421

3、nitrogen 是怎樣處理路由(route)和操作請求(request)的

路由和請求,是web伺服器必須處理的2項基本任務。由專案模組,如quickstart.erl,規定處理方式:

route(path) -> nitrogen:route(path).

request(module) -> nitrogen:request(module).

首先看對「請求」的處理。在模組nitrogen.erl中,函式request/1:

request(_) -> ok.

可見,這個函式其實什麼也不做。於是,在預設設定的條件下,來自客戶端的請求,全部由nitrogen:route(path)處理:

route(path) -> wf_utils:path_to_module(path).

好的,檢視 wf_utils.erl:

path_to_module(undefined) -> ;

%% 如果path匹配的是undefined,返回元組,即**首頁

path_to_module(s) -> 

case lists:last(s) of

%% 列表和字串是一回事。返回字串s的末尾字元

%% 如果尾字元是整數47(ascii碼「/」)... 這裡有點讓我犯糊塗

s1 = s ++ "index",

%% 字串尾附加"index"

tokens_to_module(string:tokens(s1, "/"), , true);

%% string:tokens/2,相當於python的s1.split('/')

%% 如果尾字元是「_」...

tokens_to_module(string:tokens(s, "/"), , false)

end.

tokens_to_module(, pathinfoacc, addedindex) -> ;

%% 如果第一引數(分解成符號列表的path)是空列表,返回網頁錯誤資訊

tokens_to_module(tokens, pathinfoacc, addedindex) ->

try% try to get the name of a module.

modulestring = string:join(tokens, "_"),

%% 若token=["1","2","3"],則modulestring="1_2_3"

module = list_to_existing_atom(modulestring),

%% 列表變原子。若modulestring="index",則module=index

% moke sure the module is loaded. 第乙個詞應為make,不該是moke(驢)

code:ensure_loaded(module),

catch _ : _ -> 

% strip off the last token, and try again.

lasttoken = lists:last(tokens),

tokens1 = lists:reverse(tl(lists:reverse(tokens))),

tokens_to_module(tokens1, [lasttoken|pathinfoacc], addedindex)

end.

以上函式的用途,是把web路徑轉換成為模組名稱。例如:

把web位址web/samples/effects轉換成web_samples_effects。

模組web_samples_effects已經裝載到記憶體中,它的原始檔是web_samples_effects.erl。

Nitrogen 學習過程實錄(1)

一 第一階段,熟悉quickstart基本情況 quickstart是nitrogen的樣本應用,通過分析它,了解如何製作處理動態網頁,如何完成web操作,如何裝配 等等。1 把目錄d nitrogen quickstart複製到d 改名quickstart2後,複製回d nitrogen quic...

Nitrogen 學習過程實錄(12)

7 nitrogen 的元件 elements 元件是構成nitrogen動態網頁的 片斷。元件由erlang的記錄 record 和支援模組 erl檔案 組成,用以告知編譯器 rendering engine,直譯是 渲染機 感覺不符合漢語習慣 如何翻譯成html內容。許多erlang元件有htm...

mysql安裝過程實錄

mysql安裝過程實錄 1.切換到mysql的安裝檔案目錄下.成功資訊 thank you for install mysql.3.make 安裝完後尾部類似這種 4.make install 安裝完後尾部類似這種 mysql install db mysql install db user roo...