Я пытаюсь написать интерфейс REST с помощью nginx и lua. Я хотел бы знать, что лучший способ проверить метод запроса? Если это GET, мне нужно запросить db. Если это POST или DELETE, мне нужно запустить другой скрипт lua для обновления базы данных. До сих пор, это то, что мой код выглядит следующим образом, чтобы проверить, что метод запроса:правильный способ проверить метод запроса в nginx_lua
#curl -i -X GET 'http://localhost/widgets/widget?name=testname&loc=20000' -H "Accept:application/json"
location /widgets/widget {
default_type "text/pain";
#ifisEvil... unless done inside lua
content_by_lua '
ngx.say("request is:",ngx.var.request_method)
ngx.say("the constant is:",ngx.HTTP_GET)
--ngx.say("the type is: ", type(ngx.HTTP_GET)
if ngx.var.request_method == ngx.HTTP_GET then
local args = ngx.req.get_uri_args()
for key, val in pairs(args) do
if type(val) == "table" then
ngx.say(key, ": ", table.concat(val, ", "))
else
ngx.say(key, ": ", val)
end
end
end
';
}
Результат выглядит следующим образом:
mytestdevbox2:/var/www/nsps2# curl -i -X GET 'http://localhost/widgets/widget?name=testname&loc=20000' -H "Accept:application/json"
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Wed, 25 Feb 2015 13:44:11 GMT
Content-Type: text/pain
Transfer-Encoding: chunked
Connection: keep-alive
request is:GET
the constant is:2
mytestdevbox2:/var/www/nsps2#
выше выход объясняет, почему если оператор не удается. .. потому что я сравниваю «GET» с 2. Я бы предпочел не составлять свой собственный список констант, если они уже доступны, и я просто что-то пропустил здесь.
Я знаю, что существует переменная nginx, называемая «$ request_method», но я бы предпочел не использовать ее, потому что я хочу сохранить всю свою логику в lua. Из того, что я читал до сих пор, использование инструкции «if» в nginx - evil!
Так что я пытаюсь придерживаться кода lua для подобных вещей.
Любые советы о том, где я, возможно, испортил код моей lua?
Просто сравните с строкой '' GET''. «Если» - зло, но иногда все еще лучше, чем что-либо еще. У вас довольно неестественный пример. Что вы действительно хотите сделать? –
Что неестественно? можете ли вы расширить? Я все уши, потому что я только новичок в nginx. код прямо сейчас - это всего лишь тестовый код, но, сказав, что проверка типа запроса - это что-то совершенно нормальное нет? И тогда единственная другая логика, которую я имею, - это синтаксический анализ ввода – Happydevdays
@AlexeyTen. Я знаю, что могу просто сравнить его с строкой GET, но я думаю, мне было интересно, есть ли другой способ, например, использовать существующую константу, с которой я просто не знаком. – Happydevdays