365 lines
10 KiB
Lua
365 lines
10 KiB
Lua
---
|
||
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
||
--- Created by admin.
|
||
--- DateTime: 2025/10/15 09:12
|
||
---
|
||
--local snowflake = require("util.snowflake")
|
||
local helpers = require("share.helpers")
|
||
--
|
||
--local workerId = 0 -- 假设当前机器的ID是1,范围在[0, 31]之间
|
||
--local datacenterId = 0 -- 数据中心ID,范围在[0, 31]之间
|
||
--local snow = snowflake.new(workerId, datacenterId)
|
||
--local id = snow:generateUniqueId()-- 生成ID
|
||
--ngx.say("Generated ID:"..snow.int64_to_string(id))
|
||
|
||
--max =a and b or c--a?b:c
|
||
|
||
local cjson = require("cjson.safe")
|
||
--[[
|
||
local uuid = require("resty.jit-uuid")
|
||
uuid.seed()
|
||
local val = uuid()
|
||
local uid = uuid.generate_v4() ---> v4 UUID
|
||
local uid1 = uuid.generate_v3() ---> v3 UUID (name-based with MD5)
|
||
local uid2 = uuid.generate_v5() ---> v5 UUID (name-based with SHA-1)
|
||
uuid.is_valid() ---> true/false (automatic JIT PCRE or Lua patterns)
|
||
--ngx.say(val.." "..uid)
|
||
|
||
|
||
local args = ngx.req.get_uri_args()
|
||
local pageNum = args["pagenum"] or 1
|
||
local pageSize = args["pagesize"] or 10
|
||
ngx.say("pageNum:", pageNum, " pageSize:", pageSize)
|
||
--]]
|
||
|
||
|
||
local cjson = require "cjson"
|
||
--local sampleJson = [[{"age":"23","testArray":{"array":[8,9,11,14,25]},"Himi":"himigame.com"}]]
|
||
local sampleJson = [[{"raw_header":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9","signature":"zkKAmXifqWDrMaLpXe8hrA1JpDRbdlgwS-yxNnQUOBw","raw_payload":"eyJpYXQiOjE3NjE4OTIwNDMsImV4cCI6MTc2MTg5NTY0MywidXNlcmlkIjoiYWRtaW4iLCJyb2xlIjoiIn0","valid":true,"verified":true,"reason":"everything is awesome~ :p","header":{"alg":"HS256","typ":"JWT"},"payload":{"iat":1761892043,"userid":"admin","exp":1761895643,"role":""}}]]
|
||
--解析json字符串
|
||
local data = cjson.decode(sampleJson);
|
||
--打印json字符串中的age字段
|
||
ngx.say(data["raw_header"]);
|
||
--打印数组中的第一个值(lua默认是从0开始计数)
|
||
ngx.say(data["payload"]["userid"]);
|
||
|
||
--[[
|
||
local jwttoken = require("util.token")
|
||
--获取请求头中的令牌数据
|
||
local auth_header = ngx.var.http_Authorization
|
||
--调用令牌校验
|
||
local result = jwttoken.authorizationToken((auth_header))
|
||
-- 输出结果
|
||
ngx.say(cjson.encode(result))
|
||
ngx.exit(result.code)
|
||
--]]
|
||
|
||
--[[
|
||
local jsonschema = require("jsonschema")
|
||
|
||
-- 定义一个JSON Schema
|
||
-- 定义一个JSON Schema
|
||
local schema = {
|
||
{type = "object", properties = {
|
||
{name = "username", type = "string"},
|
||
{name = "phone", type = "string"},
|
||
{name = "email", type = "string"},
|
||
{name = "idcard", type = "string"},
|
||
{name = "name", type = "string"},
|
||
{name = "office_phone", type = "string"},
|
||
{name = "telephone", type = "string"},
|
||
{name = "display_name", type = "string"},
|
||
}, required = {"username", "phone", "email", "idcard"}}
|
||
}
|
||
|
||
-- 待验证的JSON数据
|
||
--local json_data = '{"name": "Alice", "age": 30}'
|
||
--local data, pos, err = cjson.decode(json_data)
|
||
--if err then
|
||
-- error("JSON decoding error: " .. err)
|
||
--end
|
||
--读取请求体的数据
|
||
ngx.req.read_body()
|
||
--获取请求数据
|
||
local body_data = ngx.req.get_body_data()
|
||
|
||
-- 验证数据是否符合schema
|
||
local ok, err = jsonschema:generate_validator(body_data, schema)
|
||
if not ok then
|
||
error("Validation failed: " .. err)
|
||
else
|
||
print("Validation succeeded!")
|
||
end
|
||
--]]
|
||
|
||
--用于接收前端数据的对象
|
||
local args=nil
|
||
--获取前端的请求方式 并获取传递的参数
|
||
local request_method = ngx.var.request_method
|
||
--判断是get请求还是post请求并分别拿出相应的数据
|
||
if"GET" == request_method then
|
||
args = ngx.req.get_uri_args()
|
||
elseif "POST" == request_method then
|
||
ngx.req.read_body()
|
||
args = ngx.req.get_post_args()
|
||
--兼容请求使用post请求,但是传参以get方式传造成的无法获取到数据的bug
|
||
if (args == nil or args.data == null) then
|
||
args = ngx.req.get_uri_args()
|
||
end
|
||
end
|
||
|
||
--获取前端传递的name值
|
||
local name =
|
||
--响应前端
|
||
ngx.say("linux hello:"..name)
|
||
|
||
--[[
|
||
local M = {}
|
||
local charset = {} do -- [0-9a-zA-Z]
|
||
for c = 48, 57 do table.insert(charset, string.char(c)) end
|
||
for c = 65, 90 do table.insert(charset, string.char(c)) end
|
||
for c = 97, 122 do table.insert(charset, string.char(c)) end
|
||
end
|
||
function M.uuid(length)
|
||
local res = ""
|
||
for i = 1, length do
|
||
res = res .. charset[math.random(1, #charset)]
|
||
end
|
||
return res
|
||
end
|
||
return M
|
||
--]]
|
||
|
||
--[[
|
||
local jwt = require("resty.jwt")
|
||
|
||
local secret_key = "!@#$5412$#@!" -- 确保这个密钥足够安全并保密
|
||
|
||
--设置JWT的有效载荷
|
||
local obj = {
|
||
header = {typ="JWT", alg="HS256"},
|
||
payload = { -- 自定义数据
|
||
username = "admin",
|
||
role = "admin",
|
||
iss = "your_issuer", -- 签发者
|
||
sub = "1234567890", -- 主题
|
||
exp = os.time() + 3600, -- 过期时间(例如:当前时间+1小时)
|
||
iat = os.time() -- 签发时间
|
||
}
|
||
}
|
||
local jwt_token = jwt:sign(secret_key, obj)
|
||
ngx.say(jwt_token)
|
||
|
||
local jwt_obj = jwt:verify(secret_key, jwt_token)
|
||
local param = cjson.encode(jwt_obj)
|
||
ngx.say(param)
|
||
|
||
local ok, claims = jwt:verify(jwt_token) -- 使用之前生成的token
|
||
if ok then
|
||
print("Token is valid")
|
||
for k, v in pairs(claims) do
|
||
print(k, v)
|
||
end
|
||
else
|
||
print("Token is invalid:", claims) -- claims将包含错误信息
|
||
end
|
||
--]]
|
||
|
||
--[[
|
||
--创建新的JWT对象
|
||
--local jwt_obj = jwt:new()
|
||
--设置密钥
|
||
local secret_key = "!@#$5412$#@!" -- 确保这个密钥足够安全并保密
|
||
--jwt_obj:set_secret(secret_key)
|
||
|
||
--设置JWT的有效载荷
|
||
local payload = {
|
||
iss = "your_issuer", -- 签发者
|
||
exp = os.time() + 3600, -- 过期时间(例如:当前时间+1小时)
|
||
iat = os.time(), -- 签发时间
|
||
sub = "1234567890", -- 主题
|
||
data = { -- 自定义数据
|
||
username = "admin",
|
||
role = "admin"
|
||
}
|
||
}
|
||
-- 生成JWT token
|
||
local jwt_token, err = jwt:sign(secret_key, payload)
|
||
if err then
|
||
error("Failed to generate JWT token: " .. err)
|
||
end
|
||
|
||
print("Generated JWT Token:", jwt_token)
|
||
|
||
|
||
local ok, claims = jwt:verify(jwt_token) -- 使用之前生成的token
|
||
if ok then
|
||
print("Token is valid")
|
||
for k, v in pairs(claims) do
|
||
print(k, v)
|
||
end
|
||
else
|
||
print("Token is invalid:", claims) -- claims将包含错误信息
|
||
end
|
||
--]]
|
||
|
||
--[[
|
||
--引用使用的库文件
|
||
local Model = require("share.model")
|
||
--创建一个数据表相关的模型
|
||
local userModel = Model:new('sys_user')
|
||
|
||
--获取数据表中的记录数
|
||
local code, res = userModel:count()
|
||
ngx.say(res)
|
||
|
||
--查询表中id为1的数据记录
|
||
code, res = userModel:find("1")
|
||
if res ~= nil then
|
||
ngx.say(table.getn(res))
|
||
end
|
||
--查询表中的所有记录
|
||
code, res = userModel:all()
|
||
--显示查询到的数据记录
|
||
if code == 0 then
|
||
for _, row in ipairs(res) do
|
||
for key, value in pairs(row) do
|
||
ngx.say(key .. ":" .. tostring(value))
|
||
end
|
||
end
|
||
end
|
||
|
||
--分页 获取数据表中的记录
|
||
local data = nil
|
||
code, data = userModel:paginate(1, 10)
|
||
local count = data.total
|
||
ngx.say("data total:", count)
|
||
for _, row in ipairs(data.data) do
|
||
ngx.say("begin show data:")
|
||
for key, value in pairs(row) do
|
||
ngx.say(key .. ":" .. tostring(value))
|
||
end
|
||
end
|
||
|
||
ngx.say("----begin where and query---")
|
||
-- 返回 users 表中 username 字段的值是 `cgreen` 的,`password` 字段的值是 `xxxxxx` 的多条数据,注意此处返回是 table 数组,`first()` 方法返回的是单条数据
|
||
code, res = userModel:where('name','=','zhangsan'):where('password','=','111111'):get()
|
||
--ngx.say(code)
|
||
--if res ~= nil then
|
||
-- for _, row in ipairs(res) do
|
||
-- for key, value in pairs(row) do
|
||
-- ngx.say(key .. ":" .. tostring(value))
|
||
-- end
|
||
-- end
|
||
--end
|
||
--]]
|
||
|
||
--[[
|
||
--ngx.say("----begin where or query---")
|
||
-- 返回 `name` 为 `xxx` 或者 `yyy` 的所有用户 table 数组
|
||
code, res = userModel:where('name','=','zhangsan'):orwhere('name','=','admin'):get()
|
||
--for _, row in ipairs(res) do
|
||
-- for key, value in pairs(row) do
|
||
-- ngx.say(key .. ":" .. tostring(value))
|
||
-- end
|
||
--end
|
||
|
||
--orderby(column, option)方法,第一个参数传入排序的列名,第二个参数默认为ASC 也可以传入 ASC 正序 或 DESC 倒序(不区分大小写),
|
||
code, res = userModel:orderby('created_time'):get()
|
||
--for _, row in ipairs(res) do
|
||
-- for key, value in pairs(row) do
|
||
-- ngx.say(key .. ":" .. tostring(value))
|
||
-- end
|
||
--end
|
||
|
||
-- 创建一个用户
|
||
code, res = userModel:create({
|
||
id='3',
|
||
password='22222',
|
||
name='lisi',
|
||
email='lisi@gmail.com',
|
||
})
|
||
|
||
-- 更新 id = 1 的 user 的 name 为 test, avatar 为 NULL
|
||
code, res = userModel:where('id', '=', '3'):update({
|
||
phone='666666',
|
||
email='zhangsan@qq.com'
|
||
})
|
||
--输出更新后影响的行总数
|
||
ngx.say("update affected_rows: ", res.affected_rows)
|
||
|
||
-- 删除 id = 1 的用户
|
||
code, res = userModel:where('id','=','3'):delete()
|
||
ngx.say("delete affected_rows: ", res.affected_rows)
|
||
--]]
|
||
|
||
--[[
|
||
--读取请求体的数据
|
||
ngx.req.read_body()
|
||
--获取请求数据
|
||
local body_data = ngx.req.get_body_data()
|
||
ngx.say(body_data)
|
||
|
||
local data = cjson.decode(body_data)
|
||
--键值为id产生uuid数据值,增加到json中
|
||
data.id = helpers.getUuid()
|
||
local ret = helpers.convert_json(data)
|
||
ngx.say(ret)
|
||
--]]
|
||
|
||
--local header = ngx.req.get_headers()
|
||
--for k,v in pairs(header) do
|
||
-- ngx.say("[header] name:", k, "value:", v)
|
||
--end
|
||
|
||
--local payloads = ngx.req.get_uri_args()
|
||
--for k,v in pairs(payloads) do
|
||
-- ngx.say("[params] name:", k, " value:", v)
|
||
--end
|
||
|
||
--去掉组装最后一位逗号(,)
|
||
--local newKeys = keys:sub(1, #keys -1)
|
||
--local newValues = values:sub(1, #values -1)
|
||
|
||
--[[
|
||
--读取请求体的数据
|
||
--ngx.req.read_body()
|
||
|
||
--获取请求数据
|
||
local body_data = ngx.req.get_body_data()
|
||
|
||
if not body_data then
|
||
ngx.say("read file error:", err)
|
||
return ngx.exit(400)
|
||
end
|
||
local len = #body_data
|
||
|
||
local file_name = ngx.req.get_body_file()
|
||
ngx.say("file length:", len)
|
||
|
||
ngx.req.read_body_in_buffer(ngx.var.request_body_file)
|
||
|
||
ngx.say(body_data)
|
||
--]]
|
||
|
||
--[[
|
||
local cjson = require("cjson.safe")
|
||
local file_path = "/home/frankly/work/test.dat"
|
||
local file_length = 1024 * 1024 * 400
|
||
local f, err = io.input(file_path, "r")
|
||
if not f then
|
||
ngx.say("read file error:"..err)
|
||
return
|
||
end
|
||
local content = f:read(file_length) --读取文件内容
|
||
f:close() --关闭文件
|
||
--ngx.say(content)
|
||
local res = {
|
||
key = "data",
|
||
value = content
|
||
}
|
||
--ngx.header["Length"] = #content
|
||
ngx.header["Content-Type"] = 'application/json; charset=UTF-8'
|
||
ngx.say(cjson.encode(res))
|
||
ngx.log(ngx.INFO, "send data success")
|
||
--]] |