ngx.say是OpenResty中最常用的函數之一,它的作用是往客戶端輸出字元串,類似於PHP中的echo。
一、ngx.say的基本用法
使用ngx.say輸出一個字元串非常簡單,只需要在代碼中調用ngx.say函數並將需要輸出的字元串作為其參數即可:
location /test { content_by_lua_block { ngx.say("Hello, world!") } }
上述代碼中,當訪問/test路徑時,將會輸出”Hello, world!”字元串。
二、ngx.say的高級用法之變數替換
有時需要將變數替換到需要輸出的字元串中,可以使用ngx.say的變數替換功能,如下示例:
location /test { set $hello "world"; content_by_lua_block { ngx.say("Hello, $hello!") } }
上述代碼中,我們首先定義了一個$hello變數,然後在ngx.say中使用了該變數,訪問/test路徑時將會輸出”Hello, world!”字元串。
三、ngx.say的高級用法之多個參數輸出
有時需要輸出多個數據,可以使用ngx.say的多個參數輸出功能,如下示例:
location /test { content_by_lua_block { ngx.say("Hello,", "world!") } }
上述代碼中,我們在ngx.say中傳遞了兩個參數,訪問/test路徑時將會輸出”Hello,world!”字元串。
四、ngx.say的高級用法之HTML實體化
有時需要在輸出的字元串中包含HTML標籤,為了防止這些標籤被瀏覽器解析,需要進行HTML實體化處理,可以使用ngx.escape_html函數,如下示例:
location /test { content_by_lua_block { ngx.say(ngx.escape_html("Hello, world!
")) } }
上述代碼中,我們在ngx.say中傳遞了由ngx.escape_html處理的字元串,訪問/test路徑時將會輸出”<p>Hello, world!</p>”字元串。
五、ngx.say的高級用法之JSON輸出
有時需要將數據以JSON格式輸出,可以使用ngx.say的JSON輸出功能,如下示例:
location /test { content_by_lua_block { local data = { name = "John", age = 30, city = "New York" } local json_str = cjson.encode(data) ngx.header.content_type = "application/json;charset=utf-8" ngx.say(json_str) } }
上述代碼中,我們首先定義了一個包含name、age、city三個屬性的Lua表,然後通過cjson.encode將該錶轉換為JSON格式的字元串,並設置響應頭為application/json;charset=utf-8,最後將JSON字元串輸出。
六、總結
在OpenResty開發中,ngx.say是一個非常重要的函數,可以用於輸出數據、調試信息等。除了基本用法外,ngx.say還有許多高級用法,如變數替換、多個參數輸出、HTML實體化、JSON輸出等,這些用法可以幫助我們更加靈活地使用ngx.say,同時也能提高代碼的復用性和可讀性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/247686.html