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()声明变量,但没有用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)