Supertest.agent - невозможно сохранить ответный JSON в переменной - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь использовать Supertest для отправки запроса POST на мой сервер аутентификации, ожидая JWT, который я планирую сохранить в переменной. Ниже приведен мой код tokenGrabber.js:

const fs = require('fs')
    const supertest = require('supertest-with-proxy')
    const agent = supertest.agent('<URL-for-auth-token-provider>')
    const token = fs.readFileSync('./token.txt', 'utf-8');
    const cookie = `token=${token};path=/;domain=domainName;`
    let newToken = {}
    async function setNewToken(){ 
                   const resp =  await agent
                        .post('/token')
                        .proxy('http://<proxy-host:8080>')
                        .set('Cookie', cookie)
                        .timeout(5000)
                        .expect(200)
                        .then(function (error, response) {
                            if(error) { 
                                newToken = undefined
                                throw error}
                            else {
                                console.log(response)
                              let refreshedCookie = JSON.parse(response.JSON)
                              fs.writeFile('./token.txt', refreshedCookie.token, function (err) {
                                if (err) throw err;
                                console.log('Saved!');
                              })
                              newToken = refreshedCookie.token
                              console.log(newToken)
                            }                
                         })
                        }

    setNewToken()
    console.log(newToken)

Моя цель - инициировать newToken в случае успеха или undefined в случае сбоя запроса. Когда я запускаю этот скрипт, используя node tokenGrabber.js, он просто печатает пустой объект. (Я только пытаюсь напечатать это сейчас, потому что я отлаживаю это, я буду экспортировать переменную после того, как я уверен, что логика работает)

Полный вывод:

{}
(node:3340) UnhandledPromiseRejectionWarning: Error: expected 200 "OK", got 500 "Internal Server Error"
    at Test._assertStatus (/node_modules/supertest-with-proxy/lib/test.js:269:12)
    at Test._assertFunction (/node_modules/supertest-with-proxy/lib/test.js:284:11)
    at Test.assert (/node_modules/supertest-with-proxy/lib/test.js:174:18)
    at localAssert (/node_modules/supertest-with-proxy/lib/test.js:132:12)
    at /node_modules/supertest-with-proxy/lib/test.js:129:5
    at Test.Request.callback (/node_modules/superagent/lib/node/index.js:728:3)
    at parser (/node_modules/superagent/lib/node/index.js:916:18)
    at IncomingMessage.res.on (/node_modules/superagent/lib/node/parsers/json.js:19:7)
    at IncomingMessage.emit (events.js:203:15)
    at endReadableNT (_stream_readable.js:1145:12)
(node:3340) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:3340) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Вопрос: что я делаю не так? Если он выдает ошибку, почему он не меняет переменную на неопределенную? Пожалуйста, прокомментируйте, если есть более чистый способ сделать это, все еще используя supertest. Я очень новичок в NodeJS и в самой JS любая критика приветствуется.

...