如何创建一个请求对象?

我正在学习 Lua (wsapi 和 uWSGI) 的 Web 开发。我试图创建一个请求对象 (https://keplerproject.github.io/wsapi/libraries.html),以便查看其外观(以及如何使用它)。因此,我设置了一个示例代码:

require "wsapi.cgi"

function run(wsapi_env)
  local headers = { ["Content-type"] = "text/html" }
  local function hello_text()
    local result = "<html><body>\n"
    result = result .. "<p>Hello Wsapi!</p>\n"
    result = result .. "<p>PATH_INFO wsapi_env: " .. wsapi_env.PATH_INFO .. "</p>\n"
    -- 有问题的代码
    local req = wsapi.request.new(wsapi_env)
    if req then
        -- 判断是否未空
        result = result .. "<p>PATH INFO_POST : " .. req.POST .. "</p>\n"
        result = result .. "<p>PATH INFO_GET  : " .. req.GET .. "</p>\n"
    else
        result = result .. "<p>No request<\p>\n"
    end
    -- 问题代码结束
    result = result .. "<p><form method=\"post\" action=\"hello.lua\">\n"
    result = result .. "<textarea name=\"message\">test</textarea>\n"
    result = result .. "</form></p>\n"
    result = result .. "</body></html>\n"
    coroutine.yield(result)
  end
  return 200, headers, coroutine.wrap(hello_text)
end
return run

但是,当我使用请求对象时,客户端会收到一个空页面。

如何创建和使用请求对象?

谢谢你的回复!

额外问题:如何重定向到另一个页面(到同一域上的静态页面)?

点赞
用户2505295
用户2505295

也许这段小代码能够帮上忙:

local ws_request = require "wsapi.request"

function run(wsapi_env)
local qs = wsapi_env.QUERY_STRING
print("QUERY_STRING: " .. qs)
local req = ws_request.new(wsapi_env)
print(req.params.q)
end

其中 local ws_request = require "wsapi.request" 表示引入了一个名为 "wsapi.request" 的模块,并将其赋值给 ws_request 变量;

function run(wsapi_env) 表示定义了一个函数 run,它带有一个名为 wsapi_env 的参数;

local qs = wsapi_env.QUERY_STRING 表示将 wsapi_envQUERY_STRING 属性赋值给变量 qs

print("QUERY_STRING: " .. qs) 表示在控制台输出字符串 "QUERY_STRING: " 和变量 qs 的值;

local req = ws_request.new(wsapi_env) 表示将 wsapi_env 作为参数传递给 ws_request 模块中的 new 函数,并将其返回的值赋值给变量 req

print(req.params.q) 表示在控制台输出 req 变量的 params 属性的 q 属性的值。

2015-12-16 12:02:03