文档章节

Lua Web快速开发指南(3) - 初识httpd库路由

水果糖的小铺子
 水果糖的小铺子
发布于 06/14 01:43
字数 1341
阅读 22
收藏 1

本章假设您已经知道httpd server如何快速搭建, 并且知道cf的启动流程与运行流程, 知晓httpd如何创建与启动.

回顾上一章节

-- script/main.lua
local httpd = require "httpd"
local app = httpd:new("app")

app:static("static", 30)

app:listen("0.0.0.0", 8080)

app:run()

我们利用httpd内置库快速实现了一套httpd静态文件server, 其中包括静态文件目录指定与端口设置. 并且在启动server后可以在看到测试页面.

什么是"路由"与"路由表"?

Web路由用于描述资源到处理函数之间的一个映射关系.

Web路由表用于描述当前作用域下所有路由的一个集合.

如下所示:

/userlogin -> function userlogin(content) ... end

/userinfo -> function userinfo(content) ... end

对于一个服务端开发者来说! 当接受到客户端的HTTP请求时, 服务端会将请求URL中的PATH进行分割, 然后开始寻找的PATH映射对应的回调处理函数.

当URL映射的回调处理函数被找到时, 将会为其注入整个http上下文并且根据处理函数的行为将返回值展现给资源访问者.

这就是基本的路由雏形.

cf中的各种路由

cf的httpd库利用这种机制, 为开发者提供了一整套完整的路由注册方法, 其中包括: 静态文件路由、API接口路由、USE页面路由、WebSocket路由.

静态文件路由我们在上一章节已经看到过, 其本质是根据需要读取指定文件而存在的. 这种路由一般有库编写者或者框架编写者实现.

而API接口路由、USE页面路由、Websocket路由则一般由开发自行指定, 这些路由一般都用来处理对应的业务逻辑.

下面我们就开始学习如何在cf中注册路由.

注册API与USE路由

1. API路由

API接口路由用于快速构建前、后端分离的web开发场景. 它提供了基于http协议提供了基础的前、后端通讯的解决方案, 是目前位置Web领域最为常见的开发模式.

而作为前、后端数据沟通的桥梁自然需要指定指定数据交互类型. 目前为止, API路由的content-type为"application/json", 数据交互格式仅支持: json.

httpd库为开发者提供了app:api方法用来注册API路由, 第一个参数是一个字符串类型的资源路径, 第二个参数则是回调处理方法;

现在让我们在main.lua中, 添加我们刚刚学习到的api路由:

-- main.lua
local json = require "json"
app:api('/userinfo', function(content)
  return json.encode({
    code = 200,
    user = {
      name = "CandyMi",
      age = 29,
      sex = "男",
    }
  })
end)

然后打开浏览器, 输入http://localhost:8080/userinfo. 我们就可以看到我们输出的接口数据了.

上面的代码做了什么?

使用app:api定了一个查找路径为/userinfo的API路由并定义了一个函数用于描述当前资源被访问时的行为. 路由函数会由httpd库传入了一个http context表, 它包含: method、path、body、file、args、headers等一系列属性. 开发人员可以根据这些属性用于执行不同行为.

2. USE路由

USE路由与API路由类似. 不过USE路由的content-type类型为"text/html", 一般用作服务端渲染静态页面到浏览器.

现在让我们编写一段简单html代码并注册一个USE路由展示给用户观看:

app:use('/index', function (content)
  return [[
  <html>
  <head>
    <title>简陋的页面</title>
  </head>
  <body>
    <h1 align="center">简陋的首页<h1>
  </body>
  </html>
  ]]
end)

让我们再次打开浏览器, 输入http://localhost:8080/index. 这样就可以看到刚刚我们编写的页面了.

3. 静态文件路由

app:static方法的第一个参数是一个文件夹字符串, 用于告诉httpd应该如何确定文件查找路径; 第二个参数是一个可选的整形数字, 用于告诉客户端文件缓存周期.

我们在前面的代码中已经指定了app目录下的static文件夹为静态文件目录. 这里就不再赘述. 直接打开浏览器输入:http://localhost:8080/index.html再次查看效果.

4. websocket路由

app:ws方法为用户提供将http协议升级为Websocket交互协议(http over Websocket), 使用ws方法注册的路由称为Websocket路由.

Websocket路由处理方法这里不做详细赘述, 后面会有一个章节专门与大家讨论Websocket路由的运用.

完整代码示例

local httpd = require "httpd"
local app = httpd:new("app")

local json = require "json"
app:api('/userinfo', function(content)
  return json.encode({
    code = 200,
    user = {
    name = "CandyMi",
    age = 29,
    sex = "男"
    }})
end)

app:use('/index', function (content)
  return [[
  <html>
  <head>
    <title>简陋的页面</title>
  </head>
  <body>
    <h1 align="center">简陋的首页<h1>
  </body>
  </html>
  ]]
end)

app:static("static", 30)

app:listen("0.0.0.0", 8080)

app:run()

继续学习

下一章我们一起详细学习httpd的库

© 著作权归作者所有

水果糖的小铺子
粉丝 23
博文 153
码字总数 73315
作品 1
广州
程序员
私信 提问
Lua Web快速开发指南(1) - 初识cf框架

cf是什么? cf全称为: CoreFramework. 一个基于Reactor事件驱动与协程的lua高性能网络框架, 目前主要面向HTTP Application开发. cf内部主要实现了包括HTTP与HTTP Over Websoket协议的Server,...

水果糖的小铺子
06/14
131
0
Lua Web快速开发指南(2) - cf的运行机制简介与基于httpd库的开发环境搭建

从本章开始假设大家都熟悉lua语法. 运行流程 在上一章节学会了如何安装cf后, 本章节就会介绍cf到运行机制与httpd的server搭建! cf是一个非常典型的基于协程的事件驱动开发框架在封装成API后,...

水果糖的小铺子
06/14
27
0
cf v0.3 正式版发布, 一套完善的 lua Web 开发框架.

本次更新内容: new feature: 增加httpc的类封装, 用于socket复用场景、多接口并发请求支持; 新增3rd目录支持用户自动集成第三方库; 新增异步stdout日志打印方法, 定期刷新cache提升性能; 新增...

水果糖的小铺子
06/14
1K
1
Angular2

angular 可重用结构建议 angular 可重用结构建议,非常用价值 掌握 Angular2 的服务 (service) step by step 使用 Angular 构建 Progressive Web Apps(Google 开发者大会演讲 PPT & 视频) ...

掘金官方
2018/01/05
0
0
Lua Web快速开发指南(4) - 详细了解httpd库的作用

httpd库是基于HTTP 1.1协议实现而来, 内置了高性能的http协议解析器与urldecode解析库. httpd库默认情况下就能工作的很好, 但是在一些需求较为极端的场景还是需要微调一下参数. httpd常用的内...

水果糖的小铺子
06/14
5
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
10
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部