WIX VELO中Fetch API发起GET请求返回空JSON且方法变为POST问题
问题根因
- 混淆了两层请求的方法:前端调用Wix后端.jsw函数时,Wix底层默认会发送POST请求到Wix自身的服务端点,这个不是发往AgileCRM的请求方法。你在options里定义的GET是实际发往CRM的请求方法,不会在前端的网络请求日志里直接显示,你之前看到的POST是前端到Wix后端的调用请求,属于正常现象。
- 异步密钥获取逻辑错误:
getSecret是异步函数,你在顶级作用域直接赋值password = getAPIKey()、username = getUsername()时没有加await,拿到的是Pending状态的Promise对象,不是实际的密钥字符串。用这两个Promise拼接后生成的Authorization鉴权头完全错误,导致AgileCRM鉴权失败返回空响应。 getContacts函数没有返回处理后的结果,只在后端打印日志,前端调用后自然拿不到返回值,看起来响应为空。- options在模块顶级作用域初始化,此时密钥还未获取成功,后续调用函数时不会重新生成正确的请求头。
修正后的代码
后端agileapi.jsw代码
//agileapi.jsw import {fetch} from 'wix-fetch'; import base64 from "nodejs-base64-encode"; import {getSecret} from 'wix-secrets-backend'; const url = "https://photodynamic.agilecrm.com/dev/api/contacts"; export async function getContacts() { // 每次调用时再异步获取密钥,确保拿到实际字符串 const password = await getSecret("AGILERESTAPI"); const username = await getSecret("AGILEUSERNAME"); const options = { "method": "GET", headers: { "Authorization": 'Basic ' + base64.encode(username + ":" + password, 'base64'), "Content-Type": "application/json", } } try { const response = await fetch(url, options); if(!response.ok) { throw new Error('Fetch did not succeed: ' + response.status); } const result = await response.json(); console.log("CRM返回结果:", result); // 必须return结果,前端才能拿到 return result; } catch (err) { console.error("请求错误:", err); throw err; } }
前端页面代码
//wix debug page code import {getContacts} from 'backend/agileapi' $w.onReady(function (){ $w("#getContacts").onClick( async (event) => { try { const contacts = await getContacts(); // 前端可以拿到返回的联系人数据 console.log("前端拿到的联系人:", contacts); } catch (err) { console.error("调用失败:", err); } }) });
内容的提问来源于stack exchange,提问作者Bromox
相关产品推荐
相关产品推荐

