OmniWeb
LUA WEB-сервер
Team — система управления лёгкими проектами. После версии Team 2.0 переписана на Go. Для ознакомления с использованием рекомендуется перейти к версии 1.x.
Конфигурационный файл omni.ini:
; Основные настройки
[main]
port=80 ; HTTP-порт для прослушивания, по умолчанию 80
expire=900000 ; Время хранения данных по умолчанию (в миллисекундах), по умолчанию 15 минут
verbose=no ; Отображать ли подробные журналы доступа (yes|no), по умолчанию no
use_session=yes ; Включить ли сессии, по умолчанию нет
#script_entry=script/app.lua ; Файл входа
#scheduler_script=scripts/scheduler.lua ; Скрипт планирования времени, если не установлен, планирование времени не используется
; Пользовательские страницы ошибок, поддерживают только статические страницы
[error_pages]
#404=scripts/view/404.html
#405=scripts/view/405.html
; Список каталогов для загрузки файлов, alias=path
[shared_dirs]
#upload=uploads ; Доступ к /upload/1.txt указывает на ./uploads/1.txt
#some=E:\1 ; Доступ к /some/1.txt указывает на E:\1\1.txt
; Другие пользовательские настройки
[Примечание] Содержимое конфигурационного файла будет записано в глобальную таблицу Lua config.
См. каталог bin.
somewhere -- Указанная пользователем папка
|
|-- omni/omni.exe -- Исполняемый файл, скомпилированный в выпуске
|-- omni.ini -- Конфигурационный файл
|
|-- www -- Папка со статическими файлами (css, images, fonts, js и т. д.)
| |-- favicon.ico -- Значок сайта
| |-- css -- CSS
| |-- js -- JS
| |-- fonts -- Fonts
| |-- images -- Изображения
|
|-- scripts -- Папка с кодом и шаблонами
|-- app.lua -- Обязательный, определение маршрута (распределение запросов)
|-- controller -- Контроллер
|-- model -- Модель данных
|-- vendor -- Плагины LuaJIT (рекомендуется искать в luapower)
|-- view -- Папка шаблонов
Поддерживает регулярные выражения (Posix Regex).
Интерфейс: | Метод | Описание | | --- | --- | | router:get(filter, proc) | GET-маршрут | | router:post(filter, proc) | POST-маршрут | | router:any(filter, proc) | Маршрут без ограничений |
Пример:
-- Главная страница
router:get('^/$', function(req, rsp)
custom_router(default_ctrl, default_action, req, rsp);
end);
-- MVC
router:any('^/([A-Za-z][A-Za-z0-9_/]*)/([A-Za-z][A-Za-z0-9_]*)$', function(req, rsp, controller, action)
custom_router(controller, action, req, rsp);
end);
-- MVC (действие по умолчанию)
router:any('^/([A-Za-z][A-Za-z0-9_]*)$', function(req, rsp, controller)
custom_router(controller, default_action, req, rsp);
end);
-- MVC (действие по умолчанию, многоуровневый контроллер)
router:any('^/([A-Za-z][A-Za-z0-9_/]*)/$', function(req, rsp, controller)
custom_router(controller, default_action, req, rsp);
end);
Свойство | Описание |
---|---|
url | URL запроса, например /home/index?aa=1, где /home/index — это url |
method | HTTP-метод. GET/POST/PUT/DELETE |
remote | IP клиента |
cookie | Таблица Cookie |
get | Параметры запроса. Например, req.get.uid |
post | Параметры POST-запроса |
file | Путь к файлу загрузки. Например: req.file.kk — это FORM с name=kk и FILE, сохранённым в этом пути |
[Примечание] Загруженные файлы будут автоматически удалены после завершения запроса. Если необходимо сохранить файл, используйте os.cp(from, to) для копирования в другую папку.
Метод | Описание |
---|---|
header(k, v) | Установить заголовок ответа HTTP, например: rsp:header('Content-type', 'text/plain') |
echo(str) | Вывести содержимое. Например: rsp:echo('ssss') |
html(view[, data [, is_plain]]) | Вывести содержимое и установить Content-type как text/html |
json(table[, set_header]) | Вывести таблицу как JSON-содержимое, можно установить Content-type как application/json |
file(path) | Отправить файл клиенту, не принудительная загрузка |
error(code) | Отправить сообщение об ошибке. Необходимо контролировать return самостоятельно |
redirect(url) | Перенаправить. Необходимо контролировать return самостоятельно |
cookie(k, v[, expire[, path]]) | Установка COOKIE |
Параметр | Обязателен | Описание |
---|---|---|
view | Да | HTML-текст или путь к HTML-файлу |
data | Нет | Необходимые параметры для генерации динамической страницы |
is_plain | Нет | Является ли параметр view HTML-текстом |
Использует хранилище key-value со строковыми значениями. Поскольку каждый HTTP-сеанс использует отдельную Lua VM, данные, которые необходимо хранить глобально, следует использовать в storage.
Метод | Описание |
---|---|
storage.get(k) | Получить значение, хранящееся в key. Возвращает nil, если ключ не существует или срок действия истёк. |
storage.set(k, v, never_expire) | Сохранить строку. |
Функция | Возвращаемое значение | Описание |
---|---|---|
scheduler.daily(12, 0, 0, function()) | целое число | Создаёт задачу, которая будет выполняться ежедневно. Возвращает идентификатор задачи. |
scheduler.timer(12000, function(), true) | целое число | Создаёт таймер, который будет срабатывать каждые 12 секунд. Возвращает идентификатор таймера. |
scheduler.is_valid(id) | логическое значение | Проверяет, существует ли задача с указанным идентификатором. |
scheduler.remain(id) | число | Определяет, сколько миллисекунд осталось до следующего срабатывания задачи с указанным идентификатором. |
scheduler.cancel(id) | — | Отменяет задачу с указанным идентификатором. |
Интерфейс Lua-слоя C++
Расширяет библиотеку os.
Функция | Возвращаемое значение | Описание |
---|---|---|
os.exists(filepath) | логическое значение | Определяет, существует ли файл или каталог по указанному пути. |
os.cp(filepath, to) | логическое значение | Копирует файл по указанному пути в новое место. |
os.rm(filepath) | логическое значение | Удаляет файл по указанному пути. |
os.mkdir(path) | логическое значение | Создаёт каталог по указанному пути. |
os.filesize(path) | целое число | Получает размер файла в байтах по указанному пути. |
Глобальные функции
Функция | Возвращаемое значение | Описание |
---|---|---|
uuid() | строка | Генерирует уникальный идентификатор. |
md5(data) | строка | Вычисляет MD5-хеш данных. |
hash(data) | целое число | Вычисляет BKDR Hash-значение данных. |
crc32(data) | целое число | Вычисляет CRC32-контрольную сумму данных. |
random([int[, int]]) | вещественное число | Генерирует случайное число. |
tick() | вещественное число | Возвращает время процессора в миллисекундах. |
inherit(table) | таблица | Имитирует наследование. |
JSON
| Функция | Возвращаемое значение | Описание | | json.encode(v) | строка | Преобразует переменную Lua в строку JSON. | | json.decode(v) | v | Разбирает строку JSON и преобразует её в переменную Lua.
XML
| Функция | Возвращаемое значение | Описание |
| xml.parse(xml_string) | таблица | Анализирует XML и возвращает таблицу формата {name=xxx, value=xxx, attr={}, children={} }
.
BASE64
| Функция | Возвращаемое значение | Описание | | b64.encode(s) | строка | Выполняет кодирование Base64 строки s. | | b64.decode(s) | строка | Декодирует строку s, закодированную с помощью Base64.
LOGGER
| Функция | Возвращаемое значение | Описание | | log.verbose(s) | nil | Выводит информацию уровня Verbose. | | log.info(s) | nil | Выводит информацию уровня INFO. | | log.warn(s) | nil | Выводит предупреждение. | | log.error(s) | nil | Выводит сообщение об ошибке.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )