我需要向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()
答案 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
}
}