偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

關于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參數(shù)

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

如何獲取POST請求體數(shù)據(jù)

要獲得完整的POST請求體數(shù)據(jù),可以訪問 NginX 內置變量 ngx.var.request_body(注意:由于 NginX 默認在處理請求前不自動讀取 request body,所以目前必須顯式借助 form-input-nginx 模塊才能從該變量得到請求體,否則該變量內容始終為空?。?。如果想獲取 POST 方式提交的表單參數(shù),還可以借助 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 表緩存已載入模塊的數(shù)據(jù),以達到避免重復加載模塊的目的。很明顯,這種結構必然會使首個請求中通過 require 注入全局環(huán)境的模塊命名空間表在后續(xù)請求中無法訪問,因為后續(xù)請求中 package.loaded 表內已經有之前加載模塊的數(shù)據(jù),故 require 不會再次將命名空間表注入當前全局環(huán)境,使得以后所有依賴于模塊的操作都失敗。

鑒于這一問題,我們推薦web開發(fā)人員總是使用新的 require 寫法(即使用局部變量緩存模塊表),對于那些因為某種原因無法更新 require 寫法的代碼,可以通過在開始處理請求前清空 package.loaded 表中對應模塊數(shù)據(jù)的方式強制加載模塊并注入全局環(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

2011-07-13 17:57:15

SQLite

2023-10-10 08:01:13

2009-10-13 14:56:00

CCNA培訓

2010-09-13 14:43:47

無線技術常見問題

2020-11-10 23:06:38

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

2010-12-27 14:50:16

Windows 部署服

2021-02-26 22:54:06

云計算公有云私有云

2020-08-20 10:41:28

云計算云安全數(shù)據(jù)

2010-08-10 15:09:55

Flex開發(fā)

2025-03-28 10:19:06

2011-07-21 11:19:51

JAVA

2015-06-30 12:39:33

公有云問題解答

2010-07-28 11:25:08

Flex滾動條

2017-06-12 15:51:11

數(shù)據(jù)中心布線運維

2013-03-04 13:58:10

2011-05-10 15:30:22

SEO

2010-08-27 10:29:17

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

51CTO技術棧公眾號