Несколько вызовов axios в одном вызове маршрута: ошибка: невозможно установить заголовки после их отправки - PullRequest
1 голос
/ 23 мая 2019

Я прочитал все потоки в стеке, которые я смог найти относительно этой ошибки, и, хотя я многое узнал о том, что может быть неправильным концептуально, ничто из того, что я применил из этого обучения, пока не сработало.

Проблема в том, что в моем app.get (с использованием express) для индексной страницы я сначала делаю сообщение axios для базовой аутентификации в Jira Api. Затем в том же методе .get я получаю axios get с начальным запросом, который я хотел бы выполнить. Я не устанавливаю заголовки явно в этом вызове, но когда я пытаюсь отобразить результаты, я получаю сообщение об ошибке. Если я уберу вызовы res.render из моего метода axios.get, остальная часть моего сценария будет работать нормально.

Я пытался переместить все рендеры в один рендеринг, все еще в методе app.get, но вне каких-либо обратных вызовов обещаний от моих вызовов axios. В этот момент мои переменные, которые я установил, не определены (я считаю, что они не возвращаются из обещания так, как я хочу. Это все еще не в моем коде, но я попытался явно вернуть мои переменные в моем обещании, но это не работать. Я также пытался вернуть всю функцию axios.post, без игры в кости).

const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const axios = require('axios');
const hbs = require('express-handlebars');

const port = process.env.PORT || 3000;

var app = express();

app.engine('.hbs', hbs({defaultLayout: 'main', extname: '.hbs'}));
app.set('view engine', '.hbs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cors());

app.get('/', (req, res) => {

  const username = "jirauser";
  const password = "jirapassword"

  axios.post('https://myjirainstance.atlassian.net', {
    username: username,
    password: password,
    headers: {
      'Authorization': 'Basic ' + new Buffer(username + ":" + password).toString('base64'),
      'Content-Type': 'application/json'
    }
  }).then (response => {
    // console.log(res);
    const message = response.data;
    message;
    res.render('index', {
      message: "you're logged in"
    });
  }).catch(function(error) {
    authError = error;

    res.render('index', {
      error: error
    })
  });

  return axios.get('https://jamfsoftware.atlassian.net/rest/api/2/search?jql=assignee=carlton.brumbelow')
  .then (response => {
    console.log(response);

    queryResponse = 'your query was successful'

  }).catch( error => {
    console.log(error);

    queryError = error

  });

  // res.render('index', {
  //   message: message,
  //   authError: authError,
  //   queryResponse: queryResponse,
  //   queryError: queryError
  // })

})



app.listen(port, () => {
  console.log(`Server started on port ${port}`);
})
...