如何解决TypeError:“ RequestInitializerDict”上“ headers”字段的类型错误:提供的值不是“ variant”类型
我是JavaScript的新手,我正在尝试使用Cloudflare Worker上的JS创建用于IFTTT的Github API网关(因为它无法修改标头)。这是代码:
async function handleRequest(request) {
var url = new URL(request.url)
var apiUrl = 'https://api.github.com' + url.pathname
var basicHeaders = {
'User-Agent': 'cloudflare','Accept': 'application/vnd.github.v3+json'
}
const { headers } = request
const contentType = headers.get('content-type')
const contentTypeUsed = !(!contentType)
if (request.method == 'POST' && contentTypeUsed) {
if (contentType.includes('application/json')) {
var body = await request.json()
if ('additionHeaders' in body) {
var additionHeaders = body.additionHeaders
delete body.additionHeaders
}
var apiRequest = {
'headers': JSON.stringify(Object.assign(basicHeaders,additionHeaders)),'body': JSON.stringify(body),}
} else {
return new Response('Error: Content-Type must be json',{status: 403})
}
const newRequest = new Request(apiUrl,new Request(request,apiRequest))
try {
var response = await fetch(newRequest)
return response
} catch (e) {
return new Response(JSON.stringify({error: e.message}),{status: 500})
}
} else {
var apiRequest = {
'headers': JSON.stringify(basicHeaders)
}
const newRequest = new Request(apiUrl,apiRequest))
var response = await fetch(newRequest)
return response
}
}
addEventListener('fetch',async (event) => {
event.respondWith(handleRequest(event.request))
})
当我尝试运行它时出现此错误:
Uncaught (in promise)
TypeError: Incorrect type for the 'headers' field on 'RequestInitializerDict': the provided value is not of type 'variant'.
at worker.js:1:1245
at worker.js:1:1705
Uncaught (in response)
TypeError: Incorrect type for the 'headers' field on 'RequestInitializerDict': the provided value is not of type 'variant'.
这是一个较旧的版本,运行良好,但灵活性较低:
async function handleRequest(request) {
var url = new URL(request.url)
var apiUrl = 'https://api.github.com' + url.pathname
var accessToken = 'token '
var apiRequest = {
headers: {
'User-Agent': 'cloudflare','Accept': 'application/vnd.github.v3+json'
}
}
const { headers } = request
const contentType = headers.get('content-type')
const contentTypeUsed = !(!contentType)
if (request.method == 'POST' && contentTypeUsed) {
if (contentType.includes('application/json')) {
var body = await request.json()
if ('token' in body) {
accessToken += body.token
delete body.token
}
var apiRequest = {
headers: {
'Authorization': accessToken,'User-Agent': 'cloudflare','Accept': 'application/vnd.github.v3+json'
},body: JSON.stringify(body),{status: 500})
}
} else {
const newRequest = new Request(apiUrl,apiRequest))
var response = await fetch(newRequest)
return response
}
}
addEventListener('fetch',async (event) => {
event.respondWith(handleRequest(event.request))
})
唯一的区别似乎是apiRequest
,但我不知道如何解决。我尝试先用var apiRequest = new Object()
声明变量,但没有用。
解决方法
解决此问题:
let apiRequest = new Object
apiRequest.headers = Object.assign(basicHeaders,additionHeaders)
apiRequest.body = JSON.stringify(body)
apiRequest
如下所示:
{headers:{},body:"{}"}
这似乎是RequestInitializerDict
想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。