我向Axios发出以下请求:
axios.get("http://request.url/app.php", {
headers: {
"Accept": "application/json",
"X-Application-Key": "my-api-key",
},
params: {
url: "http://some/url",
format: "json",
param1: 1,
param2: 99999,
},
});
在这里模拟:
const myAPI = nock("http://request.url/");
myAPI
.get("/app.php")
.query(({url}) => url === "http://some/url")
.replyWithFile(200, path.resolve(__dirname, "my-response.json"), {
"Content-Type": "application/json",
});
只要请求中没有X-Application-Key
,一切都可以正常工作。当X-Application-Key
标头存在时,我从nock收到以下错误:
Error: Error: Nock: No match for request {
"method": "OPTIONS",
"url": "<request url goes here>",
"headers": {
"origin": "http://localhost",
"access-control-request-method": "GET",
"access-control-request-headers": "X-Application-Key",
"user-agent": "Mozilla/5.0 (darwin) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/11.12.0",
"host": "<my host goes here>",
"content-length": 0
}
}
我知道这与OPTIONS请求有关,但我不知道如何解决此问题。
我尝试通过以下方式使用.matchHeader()
方法:
myAPI
.get("/app.php")
.matchHeader("Accept", () => true)
.matchHeader("X-Mashape-Key", () => true)
.query(({url}) => url === "http://some/url")
.replyWithFile(200, path.resolve(__dirname, "my-response.json"), {
"Content-Type": "application/json",
});
但是它什么都不会改变。
答案 0 :(得分:0)
我找到了解决方案。它与诺克无关。这是Axios端的问题。原来,在节点环境中调用Axios时必须使用preg_match('/function register\(.*\)\s*{/', $classFileContent, $matches, PREG_OFFSET_CAPTURE);
$firstLinePos = strlen($matches[0][0]) + $matches[0][1];
$newClassFileContent = substr_replace($classFileContent, $codeToInsert, $firstLinePos, 0);
适配器。
因此解决方案是通过以下方式初始化Axios:
axios/lib/adapters/http