Проблемы с POST запросами из lua скрипта к api (Node JS)

Moorell

Участник
Автор темы
64
12
Вообщем решил с нодой поработать и тут всплыла проблема с POST запросами к серверу, через Postman все работает нормально все возвращает. Но когда делаю запрос из скрипта то возвращает пустые кавычки, что делать то хз)
Сразу уточню КОД на серверной части исправен ( Проверено через POSTMAN )
Код серверной части Node JS:
class MembersController {
    async addMembers(req, res) {
        const { name, frack, server } = req.body
        res.send({ name, frack, server })
    }
}

module.exports = new MembersController()


Код функции которая делает сами http запросы:
function asyncHttpRequest(method, url, args, resolve, reject)
    local request_thread = effil.thread(function(method, url, args)
        local requests = require 'requests'
        local result, response = pcall(requests.request, method, url, args)
        if result then
            response.json, response.xml = nil, nil
            return true, response
        else
            return false, response
        end
    end)(method, url, args)
    -- Если запрос без функций обработки ответа и ошибок.
    if not resolve then resolve = function() end end
    if not reject then reject = function() end end
    -- Проверка выполнения потока
    lua_thread.create(function()
        local runner = request_thread
        while true do
            local status, err = runner:status()
            if not err then
                if status == 'completed' then
                    local result, response = runner:get()
                    if result then
                        resolve(response)
                    else
                        reject(response)
                    end
                    return
                elseif status == 'canceled' then
                    return reject(status)
                end
            else
                return reject(err)
            end
            wait(0)
        end
    end)
end
Сам код запроса:
local data = {}
data = {
    name = "TestName",
    frack = 'TestFrack',
    server = "TestServer"
}
asyncHttpRequest('POST', "http://moorel.ru/api/v1/members/add", data,
function(res)
    print(res.text)
end, nil)
 
Решение
Reference:

Lua:
asyncHttpRequest(
            'POST',
            'http://moorel.ru/api/v1/members/add',
            {
                params = {
                    name = "as",
                    frac = 'pussydestroyers',
                    server = sampGetCurrentServerName()
                }
            },
            function(response)
                print(response.text);
            end,
            function(e)
                print(e);
            end)
C:\Moorel\GTA\moonloader\lib\requests.lua:125: bad argument #1 to 'next' (table expected, got userdata)

Методом тыка, через Postman узнал, что нужно как то еще передать Headers...

Moorell

Участник
Автор темы
64
12
ты луашную таблицу отправляешь на сервер,а тебе бы это в жсон переделать
Типа так?:
local data = {}
data = encodeJson({
    name = "TestName",
    frack = 'TestFrack',
    server = "TestServer"
})
asyncHttpRequest('POST', "http://moorel.ru/api/v1/members/add", data,
function(res)
    print(res.text)
end, nil)
 

chapo

чопа сребдс // TG/IG: @moujeek
Модератор
9,035
11,879
Эффект тот же, ничего не приходит на сервер
потому что ты передаешь просто таблицу, а нужно передавать { data = JSON }. Вот пример:
1738928409909.png

Lua:
        Utils.asyncHttpRequest(
            'POST',
            'http://127.0.0.1:8082/test',
            {
                data = encodeJson{
                    name = sampGetPlayerNickname(Utils.myId()),
                    frac = 'pussydestroyers',
                    server = sampGetCurrentServerName()
                }
            },
            function(response)
                print(response.status_code);
            end,
            function(e)
                print(e);
            end
        );
 

Moorell

Участник
Автор темы
64
12
потому что ты передаешь просто таблицу, а нужно передавать { data = JSON }. Вот пример:
Посмотреть вложение 263259
Lua:
        Utils.asyncHttpRequest(
            'POST',
            'http://127.0.0.1:8082/test',
            {
                data = encodeJson{
                    name = sampGetPlayerNickname(Utils.myId()),
                    frac = 'pussydestroyers',
                    server = sampGetCurrentServerName()
                }
            },
            function(response)
                print(response.status_code);
            end,
            function(e)
                print(e);
            end
        );
Вот хз, сделал так же, но проблема таже

Вот что в консоли:
body: {},
route: Route { path: '/add', stack: [ [Layer] ], methods: { post: true } },
[Symbol(kCapture)]: false
 

Moorell

Участник
Автор темы
64
12
луашный код покажи
Lua:
asyncHttpRequest(
            'POST',
            'http://moorel.ru/api/v1/members/add',
            {
                data = encodeJson{
                    name = "as",
                    frac = 'pussydestroyers',
                    server = sampGetCurrentServerName()
                }
            },
            function(response)
                print(response.text);
            end,
            function(e)
                print(e);
            end)
 
Последнее редактирование:

meowprd

Тот самый Котовский
Проверенный
1,302
732
Lua:
asyncHttpRequest(
            'POST',
            'http://moorel.ru/api/v1/members/add',
            {
                data = encodeJson{
                    name = "as",
                    frac = 'pussydestroyers',
                    server = sampGetCurrentServerName()
                }
            },
            function(response)
                print(response.text);
            end,
            function(e)
                print(e);
            end)
Reference:

Lua:
asyncHttpRequest(
            'POST',
            'http://moorel.ru/api/v1/members/add',
            {
                params = {
                    name = "as",
                    frac = 'pussydestroyers',
                    server = sampGetCurrentServerName()
                }
            },
            function(response)
                print(response.text);
            end,
            function(e)
                print(e);
            end)
 

Moorell

Участник
Автор темы
64
12
Reference:

Lua:
asyncHttpRequest(
            'POST',
            'http://moorel.ru/api/v1/members/add',
            {
                params = {
                    name = "as",
                    frac = 'pussydestroyers',
                    server = sampGetCurrentServerName()
                }
            },
            function(response)
                print(response.text);
            end,
            function(e)
                print(e);
            end)
C:\Moorel\GTA\moonloader\lib\requests.lua:125: bad argument #1 to 'next' (table expected, got userdata)

Методом тыка, через Postman узнал, что нужно как то еще передать Headers {['Content-Type'] = 'application/json'}

Мб кому-то пригодится

Lua:
local args = {}
args.data = encodeJson({name = "dasas"})
args.headers = {['Content-Type'] = 'application/json'}

asyncHttpRequest('POST', 'http://moorel.ru/api/v1/members/add', args,
function(response)
    print(response.text);
end,
function(e)
    print(e);
end)
 
Последнее редактирование: