Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单路由调用中的多个axios调用:错误:can';t在发送邮件后设置邮件头_Javascript_Node.js_Express_Axios_Jira Rest Api - Fatal编程技术网

Javascript 单路由调用中的多个axios调用:错误:can';t在发送邮件后设置邮件头

Javascript 单路由调用中的多个axios调用:错误:can';t在发送邮件后设置邮件头,javascript,node.js,express,axios,jira-rest-api,Javascript,Node.js,Express,Axios,Jira Rest Api,我已经阅读了堆栈上所有关于这个错误的线程,虽然我已经了解了很多概念上可能出现错误的地方,但从中我还没有学到任何有用的东西 问题是,在我的app.get(使用express)的索引页面中,我首先对Jira Api的基本身份验证执行axios post。然后在相同的.get方法中,我使用我想要运行的初始查询执行axios get。我没有在这个调用中再次显式地设置头,但是当我试图呈现结果时,我得到了错误。如果从axios.get方法中取出res.render调用,脚本的其余部分就可以正常工作 我已尝试

我已经阅读了堆栈上所有关于这个错误的线程,虽然我已经了解了很多概念上可能出现错误的地方,但从中我还没有学到任何有用的东西

问题是,在我的app.get(使用express)的索引页面中,我首先对Jira Api的基本身份验证执行axios post。然后在相同的.get方法中,我使用我想要运行的初始查询执行axios get。我没有在这个调用中再次显式地设置头,但是当我试图呈现结果时,我得到了错误。如果从axios.get方法中取出res.render调用,脚本的其余部分就可以正常工作

我已尝试将所有渲染移动到app.get方法中的单个渲染,但超出了axios调用的任何promise回调。在这一点上,我设置的变量是未定义的(我相信它们没有以我想要的方式从承诺中返回。它还没有出现在我的代码中,但我尝试在承诺中显式返回变量,但这不起作用。我还尝试返回整个axios.post函数,没有骰子)


这是因为您已经使用
res.render
发送了响应。我假设您现在无法发送多个响应?如果是这样的话,那么我在两次axios调用后尝试发送单个响应时是否走对了方向?如果是这样的话,我如何让脚本的其余部分都可以访问的承诺中返回的数据?直接在my then()中返回变量不起作用,返回整个axios.get/axios.post函数也不起作用。不,每个路由都有一个响应。实际上,有多种方法可以解决这个问题。例如,您可以在使用
res.render
时停止函数的执行,以确保无法发送其他响应。在您的情况下,我会跟踪catch块中是否发生了错误,并将其存储在一个变量中,然后,最后检查是否一切正常并发送响应。仅供参考,我认为您不需要在路由的回调中返回任何内容:)
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}`);
})