Express中如何在/refreshToken接口调用/auth接口并返回其响应
如何在Express内部调用另一个POST接口并返回其响应?
看起来你想要在/refreshToken接口里复用/auth的逻辑,把修改后的请求体传给/auth,然后直接返回/auth的响应给客户端对吧?这里有两种常用的实现方式,我给你详细说下:
方法一:直接复用/auth的中间件和处理逻辑(推荐)
这种方式不需要发起额外的HTTP请求,直接在内部调用对应的中间件和处理函数,性能更好。
首先,先把/auth的处理逻辑抽离出来(如果还没抽离的话),方便复用:
// 抽离/auth的处理函数 const handleAuth = (req, res) => { oauth.auth(req, res); // 注意:原代码里的`oauth.auth;`只是引用,需要执行这个函数哦 }; // 原来的/auth接口保持不变 router.post('/auth', oauth.oAthmiddleware, handleAuth);
然后在/refreshToken接口里,先修改请求体,再依次调用oauth.oAthmiddleware中间件和handleAuth处理函数:
router.post('/refreshToken', function(req, res, next) { var username = 'change'; var password = 'change'; req.body.username = username; req.body.password = password; // 先调用/auth的中间件,中间件执行完成后再调用处理函数 oauth.oAthmiddleware(req, res, function(err) { if (err) return next(err); handleAuth(req, res); }); });
这样就相当于把/refreshToken的请求经过修改后,完全走/auth的处理流程,响应也会直接返回给客户端。
方法二:用HTTP客户端发起内部请求(适合复杂场景)
如果因为某些原因不能直接复用逻辑(比如服务分布式部署、需要模拟真实HTTP请求),可以用axios或者node-fetch这类HTTP客户端来调用/auth接口:
首先安装axios:
npm install axios
然后修改/refreshToken的代码:
const axios = require('axios'); router.post('/refreshToken', async function(req, res, next) { try { var username = 'change'; var password = 'change'; // 发起POST请求到/auth接口,替换成你实际的服务地址和端口 const authResponse = await axios.post('http://localhost:3000/auth', { username: username, password: password }, { // 如果/auth依赖特定请求头(比如Cookie、自定义头),记得在这里带上 headers: req.headers }); // 把/auth的响应原封不动返回给客户端 res.status(authResponse.status).json(authResponse.data); } catch (error) { // 处理请求失败的情况,返回/auth的错误响应或自定义错误 res.status(error.response?.status || 500).json(error.response?.data || { message: 'Internal Server Error' }); } });
另外提醒下:原代码里/auth的处理函数function(req, res) { oauth.auth; }只是引用了oauth.auth但没有执行,记得改成oauth.auth(req, res)才能正常触发逻辑哦。
内容的提问来源于stack exchange,提问作者Md. Parvez Alam
相关产品推荐
相关产品推荐

