next.js 我的代码运行我的本地机器,但在heroku上:error [TypeError:标题内容[“Authorization”]]中的字符无效{code:'ERR_INVALID_CHAR'}

yks3o0rb  于 2023-04-05  发布在  其他
关注(0)|答案(2)|浏览(167)

我有一个聊天机器人使用openAI API来询问关于某个主题的特定提示。当我在本地机器上运行代码时没有问题。但是,当我将其部署到heroku时,我得到以下错误:
error [TypeError:标题内容[“Authorization”]]中的字符无效。
我尝试在fetch()POST请求中添加一个authorization header,但没有解决问题。有什么线索可以告诉我错误可能来自哪里吗?

try {
      fetchEventSource('/api/chat', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          Authorization: `Bearer ${encodedApiKey}`,
        },

        body: JSON.stringify({
          question,
          history,
        }),
        signal: ctrl.signal,
        onmessage: (event) => {
          if (event.data === '[DONE]') {
            setMessageState((state) => ({
              history: [...state.history, [question, state.pending ?? '']],
              messages: [
                ...state.messages,
                {
                  type: 'apiMessage',
                  message: state.pending ?? '',
                  sourceDocs: state.pendingSourceDocs,
                },
              ],
              pending: undefined,
              pendingSourceDocs: undefined,
            }));
            setLoading(false);
            ctrl.abort();
          } else {
            const data = JSON.parse(event.data);
            if (data.sourceDocs) {
              setMessageState((state) => ({
                ...state,
                pendingSourceDocs: data.sourceDocs,
              }));
            } else {
              setMessageState((state) => ({
                ...state,
                pending: (state.pending ?? '') + data.data,
              }));
            }
          }
        },
      });
    } catch (error) {
      setLoading(false);
      setError('An error occurred while fetching the data. Please try again.');
      console.log('error', error);
    }
  }

这是我的fetch请求。它可能来自其他地方,但我相信这可能是头部的一些问题。我还在heroku上添加了配置变量,但我无法解决它。

avkwfej4

avkwfej41#

你的语法没有问题,如果它在本地工作,我会说问题只可能来自配置变量,因为你没有在这里定义encodedApiKey。我会确保关系设置得很好-没有heroku的经验,所以没有更多的信息很难说。确保你的代码可以访问你的配置变量没有任何问题。

gab6jxml

gab6jxml2#

看来encodedApiKey的值不正确,可以打印出来确认是否定义正确,格式应该是sk-somethingVeryLong
在Heroku中,您可以使用CLI设置环境变量。
heroku config:set OPENAI_API_KEY=sk-something
或通过项目设置

在您的代码中,您可以使用process.env.OPENAI_API_KEY访问这个环境变量的值。

相关问题