Перейти к содержимому

IncluderWorld

  • записей
    11
  • комментариев
    60
  • просмотр
    30 811

Веб сервер на Lua. Часть 2: Структура

LeshaInc

2 399 просмотров

Веб сервер на Lua.
Часть 2: Структура

 

Здравствуйте. Вы читаете запись из цикла "Веб сервер на Lua". В конце данного цикла у нас получится вполне работоспособный веб сайт, причем быстрый, да еще и на Lua. Я все действия буду производить в такой среде как "c9", сайт будет доступен под адресом: http://lua-includeralex.c9.io/ Все файлы, вы можете посмотреть тут: http://ide.c9.io/includeralex/lua Что, ж поехали.

 

В этой части мы создадим структуру нашего сайта, а также узнаем о некоторых фишках Lapis.

 

Структура
Начнем, пожалуй с со структуры нашего веб-приложения.

.├── app.lua  // Входная точка приложения├── client_body_temp  // папка с tmp файлами├── fastcgi_temp  // папка с tmp файлами├── logs  // папка с логами nginx'а│   ├── access.log  // думаю, все знакомы с логами nginx│   ├── error.log│   └── nginx.pid├── mime.types  // файл с mime типами├── nginx.conf  // конфигурационный файл nginx├── nginx.conf.compiled├── proxy_temp  // папка с tmp файлами├── public  // папка с публичными файлами│   ├── script.js│   └── style.css├── scgi_temp  // папка с tmp файлами├── uwsgi_temp  // папка с tmp файлами└── views  // папка с нашими вьюшками    ├── index.etlua    └── layout.etlua  // шаблон для всех страниц


В файле app.lua находится весь код нашего приложения.
В файле nginx.conf находятся настройки NGINX
В папке public находятся все публичные файлы, например:

Файл: public/style.cssURL к файлу: хост.домен/style.css


В папке views находятся наши "вьюшки", они используются при рендере наших страниц, в этой папке должны находится только те файлы, расширение которых == .etlua. О etlua мы поговорим чуть позже.

 


Код
Как вообще будет работать наше приложение? Да, очень просто.
Всю логику мы будем описывать в файле app.lua.

 

Посмотрим на код простейшего приложения на Lapis:

local lapis   = require("lapis")local app     = lapis.Application()app:get("/", function(self)   return "Контент страницы"end)return app


Сначала мы подключаем сам lapis, далее мы создаем приложение lapis, используя метод Application. Потом создаем роутер на путь "/" который возвращает нам контент страницы. В конце концов мы возвращаем наше приложение.
Все довольно просто. Используя полученные знания мы можем написать другой код:

local lapis   = require("lapis")local app     = lapis.Application()function init() -- функция инициализации    app:enable("etlua")    app.layout = require "views.layout"endfunction getFile(path)    return io.open(path,"r"):read("*all")endfunction index(self) -- функция получения index    self.page_title = "To-Do App"    return {render = "index"}end-- роутеры страницapp:get("/", index)-- 404 ошибкаapp.handle_404 = function(self)    page = io.open("public"..self.req.parsed_url.path,"r")    if page then        return {layout = false, page:read("*all")}    else        return "Not found!"    endendinit()return app


Тут мы можем узреть вещи, неизвестные нам. А именно:

  • app.handle_404
  • render = "index"
  • app:enable("etlua")
  • app.layout = require "views.layout"


app.handle_404 - функция которая вызывается при ошибке "404", мы ее переопределяем на свою функцию. Наша функция - выполняет очень дельные вещи.
app.handle_404 вызывается если роутер для страницы не найден. В нашем случае мы проверяем, есть ли файл по пути public..<url_не_найденного_роутера>, если он есть - мы выводим его контент, параметр layout = false делает так, чтоб мы возвращали не контент сайта, а полный код сайта. Если такого файла нет - мы пишем сообщение об ошибке "404 не найдено".
render = "index" - рендерит файл (с расширением .etlua), который находится в папке views, о которой мы уже говорили.
app:enable("etlua") - включает шаблонизатор EtLua, если мы это не напишем - то потеряем огромный функционал Lapis.
app.layout = require "views.layout" - устанавливает стандартный шаблон для сайта, по пути /views/layout.etlua

 


Итак, разобрались с кодом, перейдем к шаблонизатору.

 

Шаблонизатор: EtLua
Шаблонизатор EtLua очень похож на PHP. Рассмотрим пример кода:

-- views/layout.etlua<!doctype html><html lang="en"><head>  <meta charset="UTF-8">  <title><%= page_title or "Page from Lua" %></title>  <%= page_headers or "" %></head><body>  <% content_for("inner") %></body></html>


То что находится в <% %> - луа код. Мы можем выполнять lua прямо тут.
То что находится в <%= %> - возвращает то что нам отдал луа код - в html. Например:

<title><%= "Page from Lua" %></title>Эквивалентно:<title>Page from Lua</title>


На этом все.
Enjoy!

  • Нравится 3


4 комментария


Рекомендуемые комментарии

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Добавить комментарий...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...