gpt4 book ai didi

node.js - 重定向 Nodejs Express 应用程序内 npm 模块 "request"发出的异步调用

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:57 26 4
gpt4 key购买 nike

我想捕获“request”发出的异步调用。
我要拦截的调用是“https://api.ap.org/v2/yada/yada ”。

我想拦截对 api.ap.org 的第三方调用并将其重定向到另一个服务,例如 127.0.0.1:3001。

我还想在此拦截过程中添加 header 。

我知道如何拦截 Express js 路由通过 http-proxy 发出的所有调用,但这不会拦截在 NodeJS 本身内发出的调用。

 router.get('/', function(req, res, next) {
request("https://api.ap.org/v2/yada/yada", {}, (err, data) => {
console.log('---- call made')
console.log(data);
});
res.render('index', { title: 'Express' });
});

更新 - 来自 Estus

function patchedRequest(url, options, ...args) {
let newUrl = 'https://www.google.com/' // replace url with another one;
console.log('------ args');
console.log(url);
console.log(options);
if(url.match(/api\.ap\.org/).length){
options = {};
newUrl = 'http://127.0.0.1:3000/api'
}
return originalRequest(newUrl, options, ...args);
}
  • 这使我能够拦截对第三方 API 的调用并向其发送我选择的服务。

谢谢埃斯图斯!

最佳答案

这可以通过模拟原始request模块来完成。

这大致就是像 proxyquire 这样的缓存管理库的工作原理:

patch-request.js

const originalRequest = require('request');

function patchedRequest(url, ...args) {
const newUrl = 'https://www.google.com/' // replace url with another one;
return originalRequest(newUrl, ...args);
}

Object.assign(patchedRequest, originalRequest);

for (const verb of 'get,head,options,post,put,patch,del,delete'.split(',')) {
patchedRequest[verb] = function (url, ...args) {
const newUrl = 'https://www.google.com/' // replace url with another one;
return originalRequest[verb](newUrl, ...args);
};
}

module.exports = require.cache[require.resolve('request')].exports = patchedRequest;

index.js

// patch request before it's required anywhere else
require('./patch-request');

// load the app that uses request

关于node.js - 重定向 Nodejs Express 应用程序内 npm 模块 "request"发出的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52300355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com