问题描述
我是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()
声明变量,但没有用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)