介绍

中间件的设计得益于项目分层设计模式, 其作用是为了将不同作用的代码分离.

中间件设计能方便用户更加简洁高效的管理自己的项目.

中间件设计方法

httpd库提供了一个before函数, 用于在每次请求被用户处理之前优先调用.

以下为抛砖引玉, 提供了一种最简单的中间件设计示例:

  1. local httpd = require "httpd"
  2. local http = require "http"
  3.  
  4. local app = httpd:new('httpd')
  5.  
  6. app:before(function(content)
  7. if string.find(content.path, '^/admin+') then
  8. return http.throw(401, '<h1>验证失败</h1>')
  9. end
  10. return http.ok()
  11. end)
  12.  
  13. app:api('/admin/login', function(content)
  14. return '{"code":200,"message":"ok"}' -- json string
  15. end)
  16.  
  17. app:api('/api/login', function(content)
  18. return '{"code":200,"message":"ok"}' -- json string
  19. end)
  20.  
  21. app:listen("0.0.0.0", 8080)
  22. app:run()

测试

使用curl进行测试后发现, 第一个路由被禁止访问, 第二个路由正确返回. :)