带有方括号的参数发布请求

时间:2019-05-31 07:08:19

标签: javascript node.js axios

我需要向REST API发出POST请求。自邮递员以来,我没问题。当代码尝试将两个参数传递给请求时,就会出现问题。这些参数的格式有些奇怪,user [login]user [password],当我尝试用单引号,双引号将其传递时,由于出现字符串而不是字段名称,因此会出现错误。

我的请求使用NodeJS和Axios作为请求的库。

const postToken = async() => {
    var params = { "user[login]": "xxxxx", "user[password]": "x" };
    try {
        await axios.post('https://decidecrop.nazaries.cloud/public_api/v1/users/sign_in', params, {
            headers: { "accept": "application/json", "Content-Type": "application/json" }
        })
    } catch (error) {
        console.error(error)
        throw error
    }
}

如何用user [login]user [password]是两个键的方式来表示它?

这是DOC API

https://decidecrop.nazaries.cloud/public_api/v1/apidocs

感谢问候

EDIT01

我通过以下方式调用该函数:

const FuncionLanzar = async() => {
    try {
        const resp = await postToken()
        var access_token = resp.data.access_token;
        console.log("Envio correcto de los datos" + access_token);

        /*var token = 'Bearer ' + access_token;
        const resp2 = await getStations(token)
        var datos = resp2.data;
        for (let j = 0; j < datos.length; j++) {
            const id_stacions = datos[j].id_station;
            const FiwareService = datos[j].fiware_service;
            const FiwareServicePath = datos[j].fiware_servicepath;
            const lastdata = await getLastData(token, id_stacions)
            var json = lastdata.data.data;
            const Jformat_fiware = await FormatFiware(json)
            const envio = await PostFiware(Jformat_fiware, id_stacions, FiwareService, FiwareServicePath);
            console.log("Envio correcto de los datos");
        }*/
    } catch (error) {
        console.error('Error en el enviooooooooooo' + error)
        var mensaje = "Error en la carga de datos en la estación Metos, siguiente error: " + error;
        var mailOptions = {
            from: 'xxxx@xxxx.es',
            to: 'xxxxx@xxxx.es',
            subject: 'Error en la carga de datos xxxx',
            text: mensaje
        };
        transporter.sendMail(mailOptions, function(error, info) {
            if (error) {
                console.log(error);
            } else {
                console.log('Email enviado: ' + info.response);
            }
        });
    }
}
FuncionLanzar()

1 个答案:

答案 0 :(得分:0)

您的var params格式错误,您需要按照以下说明将params作为对象传递:

var params = {
    user: {
        login: 'xxxxx',
        password: 'xx'
    }
}

Axios的默认content-type将是application/json,因此您无需定义它,现在您的axios请求看起来像:

await axios.post('https://decidecrop.nazaries.cloud/public_api/v1/users/sign_in', params)

如果您的服务器需要邮政有效载荷中的表单urlencoded数据,则可以执行以下操作:

await axios.post('https://decidecrop.nazaries.cloud/public_api/v1/users/sign_in', .stringify(params))

更新:

这意味着您的postToken未在resp.data中返回var access_token =resp.data.access_token;,如果您的sign_in未返回令牌值或未在const postToken中发行,则这是2种可能帮助您,按照以下说明更改const

async function postToken() {
    var params = {
        user: {
            login: 'xxxxx',
            password: 'xx'
        }
    };
    try {
        await axios.post('https://decidecrop.nazaries.cloud/public_api/v1/users/sign_in', params, {
            headers: { "accept": "application/json", "Content-Type": "application/json" }
        }).then(function (response) {
            return response;
        })
            .catch(function (error) {
                console.log(error);
            });

    } catch (error) {
        console.error(error)
        throw error
    }
}