发送后无法设置标题…没有问题,直到我join了身份validation?

我遇到了一些问题,试图从我的应用程序发送自定义标头的axios请求,所以我可以使用它们在我的服务器上进行身份validation。

我有一个使用Firebase身份validation和节点/快递后端服务器的原生应用程序。

当用户login时,我会抓住他们的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); 

在服务器代码中,将会有一个快速中间件来检查请求头中发送的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和一个Error: Can't set headers after they are sent

这是失败的具体请求:

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

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