使用React和JavaScript开发Gemini AI克隆项目时遭遇TypeError: request is not iterable错误求助
使用React和JavaScript开发Gemini AI克隆项目时遭遇TypeError: request is not iterable错误求助
看起来问题出在你调用run()函数时没有传入任何prompt参数,导致chatSession.sendMessage()接收到的是undefined——Google的Generative AI SDK在处理这个无效的请求内容时,内部尝试把它当成可迭代对象来处理,于是就抛出了request is not iterable这个错误。
我们来一步步修复这个问题:
1. 核心问题:缺少有效的Prompt参数
你的代码最后直接执行了run(),但run函数定义是需要接收prompt参数的。当没有传参时,prompt是undefined,这会让SDK的内部处理逻辑出错。
2. 修复方案
首先,确保调用run时传入一个有效的字符串prompt;其次,我们可以在函数里增加参数校验,避免后续再出现类似的空值问题;另外,一定要注意API Key的安全问题(后面会重点提)。
修改后的代码如下:
import { GoogleGenerativeAI } from "@google/generative-ai"; // 注意:这里的API Key硬编码在前端是非常危险的!后面会说明怎么处理 const apiKey = "AIzaSyDBBrhCK33iSPdt8RXJF6ev_6pPBthW57w"; const genAI = new GoogleGenerativeAI(apiKey); const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash", }); const generationConfig = { temperature: 1, topP: 0.95, topK: 40, maxOutputTokens: 8192, responseMimeType: "text/plain", }; async function run(prompt) { // 先校验prompt是否有效,避免空值/非字符串传入 if (!prompt || typeof prompt !== "string") { console.error("请提供有效的字符串类型Prompt"); return; } const chatSession = model.startChat({ generationConfig, history: [], }); try { const result = await chatSession.sendMessage(prompt); const responseText = result.response.text(); console.log(responseText); return responseText; // 可以把结果返回给调用方,方便在React组件里使用 } catch (error) { console.error("调用Gemini API时出错:", error); } } // 调用时传入具体的prompt内容 run("你好,我是一名React新手,能给我一些学习建议吗?"); export default run;
3. 重要提醒:API Key的安全问题
绝对不要把Google的API Key直接硬编码在前端代码里! 前端代码是完全公开的,任何人都能通过浏览器开发者工具看到你的API Key,一旦泄露,别人可以用你的Key调用API产生费用,甚至滥用你的配额。
正确的做法是:
- 搭建一个简单的后端服务(比如用Node.js/Express)
- 在后端代码里存储API Key,前端通过调用自己的后端接口来间接请求Gemini API
- 后端再作为代理,把请求转发给Google的Generative AI服务
这样就能保证你的API Key不会被泄露。
如果还有其他问题,比如在React组件里怎么触发这个函数(比如用户点击按钮或输入内容后),可以再补充说明你的使用场景,我再帮你调整代码~
备注:内容来源于stack exchange,提问作者Devan Tera
相关产品推荐
相关产品推荐

