用openresty搭建的一个繁难web api框架,不便之后用的时候疾速生成我的项目构造
我的项目地址
点击这里
目录构造
构造供蕴含config、controller、libs、model四个目录
-
config
配置文件目录,用于app、redis、database相干的配置
- app利用相干
return { default_controller = 'home', -- 默认控制器 default_action = 'index', -- 默认办法 }
- 数据库相干
local mysql_config = { timeout = 5000, connect_config = { host = "127.0.0.1", port = 3306, database = "demo", user = "root", password = "a12345", max_packet_size = 1024 * 1024 }, pool_config = { max_idle_timeout = 20000, -- 20s pool_size = 50 -- connection pool size } }
- redis配置
return { host = "127.0.0.1", -- redis host port = 6379, -- the port max_idle_timeout = 60000, -- max idle time pool_size = 1000, -- pool size timeout = 1000, -- timeout time db_index= 2, -- database index }
- libs目录
libs目录上面的公共的模块库,包含redis、db、request、response等
-
controller目录
这是控制器目录,外面有一个封装了一个基类Base.lua,业务控制器继承这个即可,根本的业务控制器代码如下
-- home.lua local Base = require("controller.base") local Home = Base:extend() function Home:index() self:json({data={}}) end
下面的代码就实现了一个控制器,拜访门路hostname://home/index即可申请index办法,申请的url规定是hostname+controller文件夹下的文件名+/+文件中的办法名(留神肯定要继承Base模块)
controller外面提供了几个根本属性
- self.request获取申请相干参数,如self.request.query.xx获取get参数,self.request.body.xx获取post参数,self.request.headers.xx获取header参数等
-
self.response输入响应后果,次要有self.response:json()返回data后果,以及self.response:redirect()跳转,self.response.get_body()获取响应后果等
为了不便开发,在Base外面封装了response,提供了self:json(),self:error(code,message)两个快捷办法
self:json({data=self.redis:get("test")}) --返回后果设置data self:error(2,"获取数据失败") --返回后果设置错误码,谬误音讯
返回的构造蕴含data,code,message字段
{"data":{"data":["BBBBB","B","AAAAA","A","BBBBB","B","AAAAA","A"]},"message":"","code":"获取胜利"}
- self.redis能够应用redis,蕴含self.redis:set,self.redis:get,self.redis:hset,self.redis:hget等等,具体能够应用的函数能够参考libs/redis.lua文件的15到72行
- self.controller获取以后控制器名称
- self.action获取以后action操作名称
-
model目录
模型相干,为了便于操作,也封装了一个Base基类,业务model只须要继承即可
-- good.lua local Base = require "model.base" local Good = Base:extend() --继承Base return Good("test",'lgid') --第一个参数表名称,第二个参数是表对应的主键(默认为id)
Base.lua封装的基类提供了单表增删改查的办法
- create(data)增加记录
- delete(id)删除记录
- update(data,id)批改记录
- get()、all()过滤记录
- where()过滤条件办法
- columns()设置查找哪些列的办法
- orderby()设置排序的办法
- count()查找数据总条数的办法
同时Base.lua也提供了一个办法用于自定义执行sql的办法,不便简单查问
- query()
疾速开始
-
nginx.conf增加相似如下代码
worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { lua_package_path 'E:/openresty/demo/src/?.lua;;'; server { charset utf-8; listen 8080; location = /favicon.ico { log_not_found off;#敞开日志 access_log off;#不记录在access.log } location / { default_type text/html; content_by_lua_file "E:/openresty/demo/src/main.lua"; } } }
-
增加控制器
在controller目录增加user.lua
local Base = require("controller.base") local User = Base:extend() function User:index() self:json({ data={ name = "hello world" } }) end return User
-
增加model
local Base = require "model.base" local User = Base:extend() return User("sls_p_user",'suid')
-
控制器应用model
local userModel = require('model.user') function User:index() self:json({ data={ name = userModel:columns('rname'):get(1) } }) end
model封装的快捷办法阐明
-
增加
local data = { name = "test", pwd = 123 } local insertId = userModel:create(data)
-
删除
-
依据主键删除
local affect_rows = userModel:delete(2)
-
依据where条件删除
local affect_rows = userModel:where("name","=",3):delete()
-
-
批改
-
依据主键批改
local affect_rows = userModel:update(data,2) local data = { suid = "1", -- data外面存在主键,依据主键更新 name = "hello 我的测试", } local affect_rows = userModel:update(data)
-
依据where条件批改
local affect_rows = userModel:where("name","=",3):update(data)
-
-
查找
-
查找一条记录
local info = userModel:where("name","=",3):get() --依据where条件查找 local info = userModel:get(1) --依据主键查找 local info = userModel:columns('suid,name'):get(1) --查找指定字段,查找字段是字符串 local info = userModel:columns({'suid','name'}):get(1) --查找指定字段,查找字段是table
-
查找多条记录
local list = userModel:where("name","=",3):all() --依据where条件查找 local list = userModel:columns('suid,name'):all() --查找指定字段,查找字段是字符串 local list = userModel:columns({'suid','name'}):all() --查找指定字段,查找字段是table
-
-
其它办法阐明
-
查找数据条数
local count = userModel:where("name","=","json"):count()
-
排序
local list = userModel:where("name","=",3):orderby("id"):all() local list = userModel:where("name","=",3):orderby("name","asc"):orderby("id","desc"):all() --多个排序
-
查找指定字段(不应用指定字段,则是查找所有字段)
local list = userModel:columns('suid,name'):all() --columns外面能够是字符串,也能够是table构造
-
依据where条件查找
local list = userModel:columns('suid,rname'):where("suid","<","30"):orderby("suid"):all() local list = userModel:columns('suid,rname'):where("suid","<","30"):where("rname","like","test%"):orderby("suid"):all() -- 能够多个where
-
自定义执行的sql
-- 关联查问 local sql = "select su.*,c.logincount from sls_p_user su join c_user c on su.suid=c.suid where su.suid=2" local result = userModel:query(sql) -- 动静参数查问 local sql = "select * from sls_p_user where suid=? and username=?" local result = userModel:query(sql,{1,"json"})
-
命令行
为了不便疾速生成控制器controller,以及模型model, 特开发了命令行,命令行应用luajit编写,须要将luajit放入环境变量
./jframe -h
jframe v0.1.1, a Lua web framework based on OpenResty.
Usage: jframe COMMAND [OPTIONS]
Commands:
controller [name] Create a new controller
model [name] [table] Create a new model
version Show version of the framework
help Show help tips
留神windows下命令是
luajit ./jframe -h
-
生成控制器,主动生成到controller目录下
jframe controller controllerName
-
生成model,主动生成到model目录下
jframe model modelName --不指定表名称,生成的model表名称默认是给定的modelname的小写格局 jframe model modelName table--指定model名称以及表名称
发表回复