Я думаю, вы запутались в посылке с обещанием и без обещания.Согласно вашему примеру, $ajax
возвращает ответ Promiseified, и вы напрямую получаете данные из ответа на запрос ajax.Вы ожидаете, что пакет request
также должен предоставлять вам данные напрямую, что неверно.
На самом деле вы можете решить вашу проблему двумя способами:
Sol.1: Используйте правильные аргументы функции обратного вызова, и вы должны получить данные в третьем аргументе функции обратного вызова.Такие как:
var request = require('request');
request({
method: "POST",
baseUrl: "https://255.255.255",
uri: "/login",
form: {
username: "username",
password: "password",
autologin: "true"
}
},
function (error, httpResponse, body) {
if (error) {
console.error(error);
}
console.log(httpResponse.statusCode);
console.log(body);
});
Sol.2: Используйте пакет request-promise
NPM (скачайте его с здесь ) и получите ответ в ответ.Например:
var request = require('request-promise');
const getData = async () => {
return new Promise((resolve, reject) => {
const options = {
method: "POST",
baseUrl: "https://255.255.255",
uri: "/login",
form: {
username: "username",
password: "password",
autologin: "true",
resolveWithFullResponse: true, // Returns full response. To get only data don't use this property or mark it false.
}
};
// Get whole Response object.
const response = await request(options);
// Returns the Promise.Resolve or Reject based on response.
if (response.statusCode < 200 || response.statusCode > 300) {
const errorMsg = 'Error occurred while POSTing the request. Got status: ' + response.status;
console.error(errorMsg);
// Reject the promise. Should be caught.
return reject(errorMsg);
}
const responseBody = response.body;
console.log(responseBody);
// Return the response.
return resolve(responseBody);
})
}
Выше реализация вернет обещание для вызываемого метода getData()
.
ПРИМЕЧАНИЕ: Оператор const response = await request(options);
вернет весь объект ответа, если resolveWithFullResponse: true,
используется в options
объекте JSON.Если вам нужно только тело ответа или данные, не указывайте свойство resolveWithFullResponse
в параметрах или присвойте ему значение false
.По умолчанию значение resolveWithFullResponse
равно false.