// 云函数入口文件 const cloud = require('wx-server-sdk'); const user_db_name = "cocos_users"; cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }); // 使用当前云环境 // 云函数入口函数 exports.main = async (event, context) => { let cmd = event.cmd; if (cmd == null) { return { code: -1, msg: "no cmd!" }; } const wxContext = cloud.getWXContext(); const db = cloud.database({ env: cloud.DYNAMIC_CURRENT_ENV, throwOnNotFound: false }); const _ = db.command; if (cmd === "login") { let user = await getOrCreaterUser(db, wxContext.OPENID); return { code: 200, data: user, }; } else if (cmd === "save") { let data = event.data; let user = await getOrCreaterUser(db, wxContext.OPENID); let saveDataRes = await db.collection(user_db_name).doc(user._id).update({ data: { game_data: _.set(data) } }); console.log("Save data:", saveDataRes, data); if (saveDataRes?.stats?.updated >= 1) { return { code: 200, data: saveDataRes }; } else { return { code: -1, msg: `Save fail, ${JSON.stringify(saveDataRes)}` }; } }else if (event?.cmd === "get") { let user = await getOrCreaterUser(db, wxContext.OPENID); return { code: 200, data: user, }; } return { code: -2, msg: `Unknow cmd: ${event?.cmd}`, }; }; async function getOrCreaterUser(db, openid) { try { let res = await db.collection(user_db_name).where({ _openid: openid }).get(); let userData = null; if (res == null || res.data == null || res.data.length <= 0) { userData = { _openid: openid, regist_time: Date.now(), }; let addResult = await db.collection(user_db_name).add({ data: userData }); userData._id = addResult._id; } else { userData = res.data[0]; } return userData; } catch (err) { console.error(`Get or create user err`, err); return null; } }