Javascript Can';在发送后设置标题…在我添加身份验证之前没有问题?

Javascript Can';在发送后设置标题…在我添加身份验证之前没有问题?,javascript,node.js,http,express,axios,Javascript,Node.js,Http,Express,Axios,我在尝试从我的应用程序发送带有自定义头的axios请求时遇到了一些问题,因此我可以在服务器上使用它们进行身份验证 我有一个使用firebase身份验证和node/express后端服务器的react本机应用程序 当用户登录时,我将获取他们的firebase idtoken并将其存储 然后,每当我向服务器发出axios请求时,我都会将该idtoken作为头发送 const { currentUser } = firebase.auth(); const url = ${serverUrl}

我在尝试从我的应用程序发送带有自定义头的axios请求时遇到了一些问题,因此我可以在服务器上使用它们进行身份验证

我有一个使用firebase身份验证和node/express后端服务器的react本机应用程序

当用户登录时,我将获取他们的firebase idtoken并将其存储

然后,每当我向服务器发出axios请求时,我都会将该idtoken作为头发送

 const { currentUser } = firebase.auth();

  const url = ${serverUrl}/api/users/${user.uid`;

  const idtoken = await currentUser.getToken(true);

    var config = {
      headers: { idtoken },
    };

const response = await axios(url, config);
在服务器代码中,将有一个express中间件来检查请求头中发送的idtoken是否有效。如果是,它将调用next()并继续执行逻辑。否则,它将失败并发送401状态

这在我的
app.js
中:

const app = express();


  app.use(bodyParser.json());

  app.use(firebaseAuthentication);
  router(app);
这是
firebaseAuthentication
中间件:

const firebaseAuthentication = async (req, res, next) => {
  console.log(req);
  try {
    const { idtoken } = req.headers;

    await admin.auth().verifyIdToken(idtoken);
    next();
  } catch (e) {
    res.status(401).send({ error: 'Unauthorized request. Must be signed in via firebase' });
  }
};
这是路由器:

module.exports = app => {

    app.get('/api/users/:firebaseUID', UserController.getUser);
}
问题是,在它尝试将好的数据发送回用户之前,一切似乎都进行了……但我得到了一个
404
和一个
错误:发送后无法设置标题

这是失败的特定请求:

  async getUser(req, res, next) {
    const firebaseUID = req.params.firebaseUID;
    try {
      const user = await User.findOne({ firebaseUID });

      res.send(user);
    } catch (e) {
      next(e);
    }
  },

这里发生了什么事,我该如何解决?谢谢

当您记录
response
时,您是否返回了正确的数据?您是否确定它已通过身份验证,因为它似乎首先发送
401
基本上,当您过早地返回响应时,会出现此错误。也就是说,标头已经从节点发送回客户端。@82t如果您有一个观点,这里可能是异步问题,函数可能会在等待authif I
console.log(user)
时抛出,然后它会准确地发回它应该做的事情。请确保在app.get路由之前有app.use