自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關于Lua模塊進行Web開發(fā)常見問題解答

移動開發(fā) iOS
關于Lua模塊進行Web開發(fā)常見問題解答是本文要介紹的內容,主要是通過LUA web開發(fā)中所提出的問題,邊解決邊學習,具體內容來看本文詳解。

關于Lua模塊進行Web開發(fā)常見問題解答是本文要介紹的內容,主要是通過LUA web開發(fā)中所提出的問題,邊解決邊學習,具體內容來看本文詳解。

如何獲取HTTP請求頭

直接在 ngx_lua 中訪問 NginX 內置變量 ngx.var.http_HEADER 即可獲得請求頭 HEADER 的內容。對于常見的特殊頭(Content-Type、Cookie 等),NginX 還使用了特殊的變量來獨立保存,例如“Content-Type”頭可以通過 ngx.var.content_type 變量取得。

如何獲取GET參數

在 ngx_lua 中訪問 NginX 內置變量 ngx.var.arg_PARAMETER 即可獲得GET參數PARAMETER的內容。

如何獲取POST請求體數據

要獲得完整的POST請求體數據,可以訪問 NginX 內置變量 ngx.var.request_body(注意:由于 NginX 默認在處理請求前不自動讀取 request body,所以目前必須顯式借助 form-input-nginx 模塊才能從該變量得到請求體,否則該變量內容始終為空?。H绻氆@取 POST 方式提交的表單參數,還可以借助 form-input-nginx 模塊省去解析過程。例如:

Nginx代碼 

  1. location /form {     
  2.     set_form_input $name;     
  3.     content_by_lua '     
  4.         local name = ngx.var.name or "";     
  5.         local say = ngx.say     
  6.         say("My name is: ", name)     
  7.     ';     
  8. }    
  9.  
  10. location /form {  
  11.     set_form_input $name;  
  12.     content_by_lua '  
  13.         local name = ngx.var.name or "";  
  14.         local say = ngx.say  
  15.         say("My name is: ", name)  
  16.     ';  

如何設置/獲取HTTP響應頭

我們已經設計了對應的API接口,近期即會予以實現(xiàn)。

如何使用 Lua 外部模塊

通過 require 引用即可,和在普通的 Lua 代碼里一樣。需要注意的一點是,通過 require 引用外部模塊一般有 2 種寫法。老的寫法是:

Lua代碼 

  1. require("xxx")    
  2. require("xxx") 

這樣會將模塊命名空間表直接導入當前全局環(huán)境內;而新的寫法是:

Lua代碼 

  1. local xxx = require("xxx")    
  2. local xxx = require("xxx") 

這樣的寫法將模塊命名空間表緩存在同名局部變量中,訪問更快,也不會污染當前全局環(huán)境。但最重要的一點是:老的寫法在 ngx_lua 中會出現(xiàn)模塊導入后無法訪問的現(xiàn)象!這是由 ngx_lua 實現(xiàn)原理決定的。

ngx_lua 使用每請求一個 coroutine 的方式運行用戶代碼,coroutine 的全局環(huán)境是重新關聯(lián)的,因此用戶代碼相當于運行在一個沙盒中,請求處理結束后用戶代碼產生的所有全局環(huán)境修改都會被舍棄,避免多個請求之間產生交叉影響,也降低了因濫用全局環(huán)境產生內存泄漏的風險。而 require 利用了全局共享的 package.loaded 表緩存已載入模塊的數據,以達到避免重復加載模塊的目的。很明顯,這種結構必然會使首個請求中通過 require 注入全局環(huán)境的模塊命名空間表在后續(xù)請求中無法訪問,因為后續(xù)請求中 package.loaded 表內已經有之前加載模塊的數據,故 require 不會再次將命名空間表注入當前全局環(huán)境,使得以后所有依賴于模塊的操作都失敗。

鑒于這一問題,我們推薦web開發(fā)人員總是使用新的 require 寫法(即使用局部變量緩存模塊表),對于那些因為某種原因無法更新 require 寫法的代碼,可以通過在開始處理請求前清空 package.loaded 表中對應模塊數據的方式強制加載模塊并注入全局環(huán)境(注意每次都加載模塊可能產生性能瓶頸?。?,例如:

Lua代碼 

  1. package.loaded.xxx = nil     
  2. require("xxx")   

小結:關于Lua模塊進行Web開發(fā)常見問題解答的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網
相關推薦

2011-08-09 15:10:00

SQLite

2010-05-12 17:04:20

BlackBerry開

2013-05-23 09:49:49

Chrome for google

2010-09-13 14:43:47

無線技術常見問題

2023-10-10 08:01:13

2009-10-13 14:56:00

CCNA培訓

2011-07-13 17:57:15

SQLite

2020-11-10 23:06:38

物聯(lián)網智能產品開發(fā)IOT

2021-02-26 22:54:06

云計算公有云私有云

2010-12-27 14:50:16

Windows 部署服

2020-08-20 10:41:28

云計算云安全數據

2010-08-10 15:09:55

Flex開發(fā)

2011-07-21 11:19:51

JAVA

2015-06-30 12:39:33

公有云問題解答

2025-03-28 10:19:06

2017-06-12 15:51:11

數據中心布線運維

2010-07-28 11:25:08

Flex滾動條

2013-03-04 13:58:10

2011-05-10 15:30:22

SEO

2010-08-27 10:29:17

DB2數據庫開發(fā)
點贊
收藏

51CTO技術棧公眾號