需求:根据客户需求,可以在ngx下 通过lua做接口二次封装再次转发给用户或第三方
场景:对返回值有要求的、接口屏蔽字段、或做一些业务上的验证等
1、windows直接下载openresty 解压即可,就完成了windows下使用lua的开发环境
2、配置:
a、在nginx.conf里http下配置如下代码:
include mime.types; default_type application/octet-stream; lua_package_path "/lualib/?.lua;;"; #lua 模块 lua_package_cpath "/lualib/?.so;;"; #c模块 include lua.conf; #导入自定义lua配置文件 resolver 8.8.8.8;
b、在nginx.conf同目录创建lua.conf文件专门存放lua的路由配置
1 2 3 4 5 6 7 8 9 10 | #lua.conf server { charset utf- 8 ; #设置编码 listen 80 ; server_name _; location /user { default_type 'text/html' ; content_by_lua_file lua/api/userController.lua; #相对于nginx安装目录 } } |
c、在ngx根目录下的lua文件夹里创建“api”文件夹,并且在里面添加userController.lua 处理文件类,例如代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | local request_method = ngx.var.request_method local args = nil --1、获取参数的值 获取前端提交参数 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() end --2、组合url请求Get/Post请求 并获取参数 local http = require "resty.http" local httpc = http. new () local url = "http://xxxxx/user/login/" ..args[ "userid" ].. "/" ..args[ "pass" ] local resStr --响应结果 local res, err = httpc:request_uri(url, { method = "GET" , --args = str, body = "a=1&b=2" , headers = { [ "Content-Type" ] = "application/json" , } }) --3、开始重新组合参数 例子 可根据返回的JSON自己处理 local cjson = require "cjson" local sampleJson = [[{ "age" : "23" , "testArray" :{ "array" :[8,9,11,14,25]}, "Himi" : "himigame.com" }]]; --解析json字符串 local data = cjson.decode(sampleJson); --打印json字符串中的age字段 ngx.say(data[ "age" ]); --打印数组中的第一个值(lua默认是从0开始计数) ngx.say(data[ "testArray" ][ "array" ][1]); --4、打印输出新返回值 ngx.say(res.body) |
3、启动ngx服务器,访问地址,路由为user
你好世界!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话