1 Star 0 Fork 13

李加俊 / OmniWeb

forked from leo / OmniWeb 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

#OmniWeb

MVC模式的LUA WEB服务器(重构版)

特性

  1. 小而快将是本软件的始终目标
  1. 集成Mongoose(6.6), LuaJIT(2.1.0B2), lua-resty-template, MYSQL
  2. 采用MVC开发模式

目录说明

Root
|++ app				应用目录
|	|++ controllers	控制器
|	|++ models		模型
|	|++ views		视图
|	|-- common.lua	应用的公用函数,及全局验证函数
|	|-- config.lua	应用配置,默认加载到全局就是_CONF中
|
|++ core				核心组件,修改该目录下文件需要重启服务器
|	|++ vendor			插件库
|	|-- app.lua			预加载文件列表及程序入口
|	|-- common.lua		内置的常用函数
|	|-- controller.lua	controller基类
|	|-- cookie.lua		cookie的实现
|	|-- error.lua		默认的错误处理
|	|-- model.lua		model层的实现
|	|-- json.lua		一个外国N人写的Json库
|	|-- router.lua		不是路由的路由
|	|-- session.lua		session的实现
|	|-- template.lua	导入lua-resty-template库
|
|++ public		静态文件
|	|++ css
|	|++ font
|	|++ js
|
|-- omni.exe	Windows平台的服务器可执行文件

运行说明

支持启动命令行参数有:

参数 说明
-h, help 显示使用说明
-v 后台Verbose输出
-s=[N] 设置session的过期时间(秒),默认900
-p=[N] 设置监听端口,默认80
-d 以Daemon方式后台启动(Linux Only)

一个简单的实例

控制器:app/controllers/index.lua

local index = controller.new()

-- 访问http://xxxhost/index/test时调用
function index:test()
	self.html('index/test.html', {title = "This is a test", word = "hello"});
end

-- 不要忘记返回这个controller哦
return index;

视图:app/views/index/test.html

<!-- 导入其他文件(header) -->
{(public/header.html)}
This is a test {{word}};
{(public/footer.html)}

控制器

  1. 声明自定义控制器 local mycontroller = controller.new()
  2. 控制器方法
    • .init() 在执行action之前自动调用,如果有需要,请定义该方法
    • .html(template, data) 返回html渲染
    • .json(data) 返回application/json格式的数据
    • .file(name, content, len) 强制浏览器下载
    • .jump(url, title, message, wait) 一个倒计时的跳转页面
  3. 写完之后,不要忘记返回这个controller, return mycontroller

视图

采用lua-resty-template. 见Github

模型

  1. 在'app/config.lua'中定义database项。
  2. 使用local m = model.new()声明一个操作对象
  3. 方法
    • .query(sql) -> table 用于SELECT
    • .update(sql) -> int 用于INSERT, DELETE, UPDATE
    • .get(name) 其他文件引入该model
  4. 不要忘记返回return m;

Sesson

  • 主要方法sessoin.get(key)session.set(key, value)
  • Session为内存方式,作用一次运行期间
  • Session的过期时间使用启动参数-s=N设置

运行期全局存储

  • store.get(key) -> string 取全局数据
  • store.set(key, value[, is_never_expire]) 保存全局数据
  • 由于session内部使用store.set(session.id(), serialize(session.data))保存会话数据,为防止污染,全局数据的key请以'@'开头

Cookie

主要方法cookie.get(key)cookie.set(key, value, expire)

全局验证

app/common.lua中有一个__init()方法,该方法在调用控制器之前自动执行,如果需要全局验证功能,可实现该方法

上传文件

上传文件使用固定url:/upload,前端集成了JQuery Upload File Plugin

  • 推荐上传过程与表单提交分离,先上传再进行表单提交
  • 上传的文件在./upload下,读取时为./upload/服务器文件名
  • 文件上传完成后会返回json: [{"name" : "原始文件名", "path": "服务器文件"}]

例:

HTML

<form action="/user/info" method="POST">
	<input type="text" name="other">
	<input type="text" id="file" name="file" hidden> <!-- 上传完成后,设置该值为服务器保存的上传文件名 !-->
	<div id="uploader"></div>
	<button id="submit" type="submit" disabled>提交</button>
</form>

JS

$('#uploader').uploadFile({
	url: "/upload",
	multiple: false,
	dragDrop: true,
	maxFileCount: 1,
	uploadStr: "上传",
	cancelStr: "取消",
	doneStr: "上传完成",
	returnType: "json",
	onSuccess: function(files, data, xhr, pd) {
		$('#file').val(data[0].path);
		$('#submit').removeAttr('disabled');
	}
});

C++导出到Lua层的变量说明

全局变量

  • _URL 访问的地址
  • _METHOD GET/POST
  • _GET GET参数
  • _POST POST参数
  • _REMOTE 客户端IP
  • _CONTROLLER 当前访问的Controller名
  • _ACTION 当前访问的Action名

全局函数

  • md5(string) -> string md5一个string
  • base64_encode(string) -> string BASE64加密
  • base64_decode(string) -> string BASE64解密
  • random(int[, int]) -> double 生成随机数
  • url_decode(string) -> string URL解码
  • echo(string) 输出内容
  • header(string) 指定HTTP header
  • time(int) 输出GMT
  • redirect(string) 直接跳转

LOGGER

  • log.verbose(s) 输出VERBOSE信息
  • log.info(s) 输出INFO
  • log.warn(s) 输出警告
  • log.error(s) 输出错误

Mongoose

软件使用Mongoose(GPL v2)做为HTTP服务器 如做商业用途,请自行阅读Mongoose的License

空文件

简介

立志做一个小而精的MVC模式的LUA服务器 展开 收起
Lua
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Lua
1
https://gitee.com/lijiajuns/OmniWeb.git
git@gitee.com:lijiajuns/OmniWeb.git
lijiajuns
OmniWeb
OmniWeb
master

搜索帮助