从截图中看到的错误:
TypeError: Failed to construct 'URL': Invalid base URL根本原因:
// 设置5秒超时,避免无限等待
const timeout = new Promise((_, reject) =>
setTimeout(() => reject(new Error('企微API调用超时')), 5000)
);
const chatInfo = await Promise.race([apiCall, timeout]);
try {
// 尝试从企微API同步
await this.syncFromWxwork();
} catch (error) {
console.warn('⚠️ 企微API同步失败,使用Parse缓存数据');
// 继续使用Parse数据,不阻塞页面
}
const errorMsg = `未找到群聊记录\n\n可能的原因:\n1. Parse数据库中没有该群聊记录\n2. 企微API权限不足\n3. 群聊ID不正确\n\n解决方法:\n请运行测试脚本创建群聊记录`;
步骤1:启动项目
cd yss-project
npm start
步骤2:打开测试工具
在浏览器中打开:
file:///E:/yinsanse/yss-project/CREATE-TEST-GROUPCHAT.html
或者双击文件:CREATE-TEST-GROUPCHAT.html
步骤3:点击按钮
工具会自动:
如果你更喜欢用控制台,打开浏览器控制台(F12)运行:
(async () => {
try {
const CONFIG = {
cid: 'cDL6R1hgSi',
userid: 'woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg',
wxworkChatId: 'wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A'
};
// 配置localStorage
localStorage.setItem('company', CONFIG.cid);
localStorage.setItem(`${CONFIG.cid}/USERINFO`, JSON.stringify({
userid: CONFIG.userid,
errcode: 0,
errmsg: 'ok',
cid: CONFIG.cid
}));
// 导入Parse
const { FmodeParse } = await import('fmode-ng/parse');
const Parse = FmodeParse.with('nova');
// 查询现有记录
let query = new Parse.Query('GroupChat');
query.equalTo('chat_id', CONFIG.wxworkChatId);
query.equalTo('company', { __type: 'Pointer', className: 'Company', objectId: CONFIG.cid });
let groupChat = await query.first();
// 如果不存在,创建新记录
if (!groupChat) {
console.log('📝 创建新的群聊记录...');
const GroupChat = Parse.Object.extend('GroupChat');
groupChat = new GroupChat();
groupChat.set('chat_id', CONFIG.wxworkChatId);
groupChat.set('name', '测试群聊 - ' + new Date().toLocaleString('zh-CN'));
groupChat.set('company', { __type: 'Pointer', className: 'Company', objectId: CONFIG.cid });
groupChat.set('member_list', [{
userid: CONFIG.userid,
type: 1,
join_time: Math.floor(Date.now() / 1000)
}]);
groupChat.set('data', {
createdFrom: 'console-script',
createdAt: new Date()
});
groupChat = await groupChat.save();
console.log('✅ 群聊记录已创建');
} else {
console.log('✅ 找到现有群聊记录');
}
// 生成URL
const url = `http://localhost:4200/wxwork/${CONFIG.cid}/chat-activation/${groupChat.id}`;
console.log('📋 测试URL:', url);
// 复制到剪贴板
await navigator.clipboard.writeText(url);
// 显示提示并打开页面
alert(`✅ 成功!\n\n群聊名称: ${groupChat.get('name')}\nParse ID: ${groupChat.id}\n\nURL已复制到剪贴板\n\n点击确定后自动打开测试页面`);
window.open(url, '_blank');
} catch (error) {
console.error('❌ 错误:', error);
alert('发生错误: ' + error.message + '\n\n请确保项目已启动且Parse Server已连接');
}
})();
公司ID (cid): cDL6R1hgSi
用户ID (userid): woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg
群聊ID (chat_id): wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A
创建记录后,测试URL格式为:
http://localhost:4200/wxwork/cDL6R1hgSi/chat-activation/{Parse记录的objectId}
例如:
http://localhost:4200/wxwork/cDL6R1hgSi/chat-activation/abc123xyz
修复后的页面加载流程:
1. 📥 初始化企微SDK
├─ ✅ 成功 → 继续
└─ ❌ 失败 → 使用本地模式,继续
2. 🔍 查询Parse数据库
├─ 方式1: 通过 objectId 查询
├─ 方式2: 通过 chat_id 查询
└─ ❌ 都没找到 → 尝试从企微API创建
3. 🔄 同步企微数据(可选)
├─ ✅ 成功 → 更新Parse记录
└─ ❌ 失败 → 使用Parse缓存数据
4. 📱 显示页面
└─ 使用Parse数据渲染界面
关键改进:
打开控制台可以看到详细的日志:
✅ 初始化企微SDK, cid: cDL6R1hgSi
📥 开始加载数据...
📋 参数: { cid: 'cDL6R1hgSi', chatId: 'wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A' }
🔍 查询群聊...
✅ 找到群聊: 测试群聊
📊 群聊信息: { objectId: 'xxx', chat_id: 'wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_A', ... }
🔄 尝试从企微API同步群聊信息...
⚠️ 企微API同步失败,使用Parse缓存数据
💾 继续使用Parse数据库中的缓存数据
检查清单:
npm start这是正常的! 页面已经优化为:
企微API失败的常见原因:
解决方法: 不需要解决!页面会自动使用Parse数据。
方法1: 使用 CREATE-TEST-GROUPCHAT.html
方法2: 在Parse Dashboard中手动创建:
GroupChatchat_id: wrgKCxBwAALwOgUC9jMwdHiVTFmyXs_Aname: 任意群聊名称company: Pointer → Company → cDL6R1hgSimember_list: Array (可以为空)CREATE-TEST-GROUPCHAT.html - 可视化测试工具TEST-WXWORK-CHAT.md - 详细测试说明CHAT-ACTIVATION-COMPLETE-GUIDE.md - 完整功能文档推荐流程:
CREATE-TEST-GROUPCHAT.html预期结果:
如有问题,请查看控制台日志! 🔍