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/n/247686.html