openresty及lor入门教程
openresty及lor入门教程
- 一、开发环境准备
- 1、openresty安装
- 2、eclipse安装lua插件
- 3、环境配置说明
- 二、Lor框架基本使用
- 1、分配置文件dev.conf介绍
- 2、main入口文件介绍
- 3、router文件介绍
- 4、action文件夹介绍
- 5、service文件夹介绍
- 6、filter文件夹介绍
- 7、综述
- 三、补充
- 1、调式
- 2、代码中调式
一、开发环境准备
1、openresty安装
下载openresty-1.13.6.1-win32.zip,解压到本地任一目录
2、eclipse安装lua插件
eclipse–>help–>eclipse marketplace–>输入lua,只能查到一个,下载并安装
3、环境配置说明
打开openresty的目录,找到conf文件夹下的nginx.conf
找到http下的server部分,listen对应的是端口号,可以修改。
增加 include 语句,引入分配置文件,对应的是自己lua项目中的配置文件,以后只需要对应自己工程中修改,不需要在改openresty中的conf配置文件。
注:该路径要写绝对路径。
双击openresty目录下的nginx.exe可以启动openresty。
在cmd中用命令tasklist /fi "imagename eq nginx.exe
可以看是否启动成功。
上面的情况就代表启动成功。
关闭openresty可以用命令taskkill /pid 3128 /F
启动成功后,可以在浏览器中访问到openresty的默认页面。localhost:8077(上面nginx.conf中配置的端口号)
openresty环境装成功后,继续编写分配置文件中的conf文件,也就是include中对应的配置文件。
- Eclipse中新建一个lua项目,可以建一个文件夹放对应的配置文件。
- 从上图看出dev.conf是nginx中配置文件引入的分配置文件地址,这个配置文件中,只有一个端口号,还有一个是lua文件的入口,也需要用绝对路径。Lua入口文件的地址要用lua_package_path引入。
- Main.lua中只是简单的写了一句hello world,重启openresty服务。出现以下页面,则调用lua脚本成功。
二、Lor框架基本使用
Lor是一个运行在OpenResty上的使用Lua编写的Web框架。
具体资料见:http://lor.sumory.com/guide/
以下介绍以lor_demo工程为例,下面是lor_demo工程目录结构图。
1、分配置文件dev.conf介绍
nginx的conf要引入该路径,下面对配置文件中的逐一解释:
- 第4行是lua_package_path是引入lua文件的路径,主要包括两部分,app下面是自己的业务逻辑用到的,lualib是lua中常用的一些架包。配绝对路径 。
- 第5行是lua_package_cpath是引入c的文件的写法,没有可以不写 。
- 第10行listen的是工程启动后访问的端口号 。
- 第11-15行是对应前端工程的对应配置,其中root 后面是前端对应的文件夹地址,index是对应目录下,前端页面的入口地址。配绝对路径。
按上面的配置localhost:8080/index.html即可访问对应的前端 - 第20行是引入lua入口文件的地址。配绝对路径
- 第6-8行及22-29行是对应于springboot服务工程的相关配置,上下文及对应ip的配置config文件中主要是放一些配置项,如登录白名单,mysql,redis,调用其它服务的路径等等。
2、main入口文件介绍
首先说明, require加载了对应的模块。可以理解为引入对应的包或者类,重点关注以下几句:
local lor = require("lor.index")
local app = lor()
local router = require("router")
local check_login = require("filter.check_login")
app:use(check_login(whitelist))
router(app)
app:run()
上面是lor框架的最简单加载过程,初始化一个app,也就是lor(),然后调用app里面的函数,router是一个路由,user后的check_login是一个拦截,最后run运行。
3、router文件介绍
local xs_router = require("k12.action.xs_action")
app:use("/xxkj/xs", xs_router())
该文件主要配置访问接口的路径的前缀部分,具体的router中再对应实现接口。
4、action文件夹介绍
放具体的接口路径,出入参的验证等处理。
先申明一个router: local xsxx_router = lor:Router()
- 定义get接口
xsxx_router:get("/xsxq", function(req, res, next) #业务逻辑
end)
- 定义post接口
xsxx_router:post("/scxs", function(req, res, next) #业务逻辑
end)
前半部分是路径,和前面router文件中的前半部分拼起来是全路径。 function中可以处理出入参,req可以取到入参相关,res可以定义出参相关。
常用到req.body, req.query, res:json
5、service文件夹介绍
供action调用,处理具体的业务逻辑,如调用外部接口等。
介绍两种调用外部接口方式 :
- 用工具类使用全路径调用
local result=httpUtil:get(url.."/xs/cxxslb"..param)
local result=httpUtil:post(url.."/xs/scxs",cjson.encode(post_param))
- 用ngx的原生方法调用,这个时候用分配置文件中的相对路径调用
- 调单个接口
local result=ngx.location.capture("/xs/xsxq?id="..id)
- 同时调多个接口
local res1,res2=ngx.location.capture_multi({{"/xs/xsxq?id="..xsid},{"/bj/bjxq?id="..bjid}})
6、filter文件夹介绍
主要写登录拦截的相关逻辑,可以暂时不关注。
7、综述
按照上面编写完接口后,可以根据分配置文件中的端口号,router文件中的路径前缀,action文件中的路径及接口类型(get/post)去访问调试接口了http://localhost:8080/xxkj/xs/xsxq?id=1100000000000000019
三、补充
1、调式
openresty不能单步执行,调式的时候,只能看log下的error.log文件中的日志。
2、代码中调式
一般写log语句查看对应的变量。
ngx.log(ngx.ERR, cjson.encode(req.body))
ngx.log(ngx.ERR,"error")
openresty及lor入门教程相关推荐
- Kafka入门教程与详解
1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...
- 【CV】Pytorch一小时入门教程-代码详解
目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...
- python tornado教程_Tornado 简单入门教程(零)——准备工作
前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- mysql query browswer_MySQL数据库新特性之存储过程入门教程
MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...
- python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...
- air调用java,AIR2.0入门教程:与Java应用交互
在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...
- 【Arduino】开发入门教程【一】什么是Arduino
Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...
- python 三分钟入门_Cython 三分钟入门教程
作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...
最新文章
- 指针:自定义函数sumDiff(),调用它来求两个数的和、差
- 【操作系统】—线程概念和多线程模型
- linux下实现getch()函数的功能,Linux下实现getch()函数功能
- php币对人民币汇率_php汇率(php等于多少人民币)
- 微积分总结(数列与无穷级数)
- 泰灏咨询的使命及愿景
- goland 注释模板_论文写作标准格式模板
- 微信 心理测试 软件,敢不敢做一份微信版心理测试?
- 服务器资源下载简单实现
- 爱奇艺又涨价?注定想追剧就要成为SSSSVIP
- oceanbase安装记录
- 这个年龄计算程序相当不科学,体验还是差差哒
- 刀片服务器型号规格,刀片服务器是什么,刀片服务器规格统一好不好
- 计算机表格中如何计算数据透视表,如何在EXCEL数据透视表中进行计算 |
- 使用copy con命令创建批处理文件
- 干货!从0到1教你运营抖音
- 0x800703e3复制文件错误
- 数据溢出与除数为0错误
- 一套全开源的智慧园区管理系统源码
- pako 压缩lottie动效资源方案
热门文章
- matlab:使用4阶龙格库塔方法求微分方程组的值
- nit计算机考试题目,计算机nit考试试题
- 列式存储和行式存储的真正区别
- 企业云盘哪个最好用?
- CorelDRAW生成条码后,条码为什么不能编辑
- python前端开发和后端开发工程师_一文看懂前端和后端开发
- 烟雨黑帽SEO程序演示:AI智能模板在线制作制作神器-单域名版+多域名版-一键批量制作黑帽程序所使用的单页模板
- [转][001] [STM32] 如何下载STM32原厂资料
- vue和表格和饼状图的渲染
- 开源轻量级的定时器调度器 | SmartTimer