получить доступ к возвращенному заголовку из предыдущего поста в nodejs - PullRequest
0 голосов
/ 03 декабря 2018

Я делаю POST в node.js.Оттуда мне нужно получить доступ к заголовку токена аутентификации, чтобы сделать еще один POST с этим токеном аутентификации в качестве значения заголовка.

У меня проблемы с получением токена аутентификации из возвращенного объекта.

var request = require('request-promise');
var uri = 'https://myurl/rest/login';


var _include_headers = function(body, response, resolveWithFullResponse) {
  return {'headers': response.headers, 'data': body};
};

var options = {
  method: 'POST',
  uri: uri,
  json: true,
  transform: _include_headers,
  body: { "username":"user", "password":"password"
    },
}

request(options)
    .then(function (parsedBody) {
        console.log("post success");
    })
    .catch(function (err) {
        console.log("post failed");
    });

return request(options)
.then(function(response) {
 // console.log(response.headers);
  console.log(response.headers);
  //var result = JSON.stringify(response.headers);
//  var result = JSON.stringify(response.headers);
  console.log(response.headers);
//  console.log(response.data);



});

Вывод, который я получаю, ниже.Я попытался превратить его в строку и получить доступ к response.headers [0] .authentication-token, но он возвращает с ошибками undefined для пар ключей следующим образом.

    Unhandled rejection TypeError: Cannot read property 'date' of undefined
    at C:\Users\n0200675\testing\logintest.js:32:35
    at tryCatcher (C:\Users\n0200675\testing\node_modules\bluebird\js\release\ut
il.js:16:23)
    at Promise._settlePromiseFromHandler (C:\Users\n0200675\testing\node_modules
\bluebird\js\release\promise.js:512:31)
    at Promise._settlePromise (C:\Users\n0200675\testing\node_modules\bluebird\j
s\release\promise.js:569:18)
    at Promise._settlePromise0 (C:\Users\n0200675\testing\node_modules\bluebird\
js\release\promise.js:614:10)
    at Promise._settlePromises (C:\Users\n0200675\testing\node_modules\bluebird\
js\release\promise.js:694:18)
    at _drainQueueStep (C:\Users\n0200675\testing\node_modules\bluebird\js\relea
se\async.js:138:12)
    at _drainQueue (C:\Users\n0200675\testing\node_modules\bluebird\js\release\a
sync.js:131:9)
    at Async._drainQueues (C:\Users\n0200675\testing\node_modules\bluebird\js\re
lease\async.js:147:5)
    at Immediate.Async.drainQueues (C:\Users\n0200675\testing\node_modules\blueb
ird\js\release\async.js:17:14)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)

1 Ответ

0 голосов
/ 06 декабря 2018

Я закончил тем, что использовал это.

var uri = 'XXXXXXXXXX';

var _include_headers = function(body, response, resolveWithFullResponse) {
  return {'headers': response.headers, 'data': body};
};

var options = {
  method: 'POST',
  uri: uri,
  json: true,
  transform: _include_headers,
  body: { "username":"XXXXXXXXXXXXXXX", "password":"XXXXXXXXXX"
    },
}

request(options)
    .then(function (parsedBody) {
        console.log("post success");
    })
    .catch(function (err) {
        console.log("post failed");
    });

return request(options)
.then(function(response) {

var result = JSON.stringify(response.headers);
var res = result.match(/{\"authentication-token":".*","content-type/);
stringgy = res[0].substring(25);
authtoken = stringgy.substring(0, stringgy.length-17);
console.log(authtoken);
});
...