用户:
伴雪纷飞查看:2 回复:5 评论:2 创建时间:2023-01-08T11:44:39
console.clear()
db.sql`CREATE TABLE IF NOT EXISTS playerstate (
userKey CHAR(16) NOT NULL,
state MEDIUMTEXT NOT NULL--超长的字符串类型MEDIUMTEXT
)`;//创建表
async function save(entity) {
if (!entity.player.userKey)return;
await db.sql`
INSERT INTO playerstate (userKey,state) --给表添加两个值
VALUES(${entity.player.userKey},${JSON.stringify(entity)})--将玩家实体对象转换为字符串
ON CONFLICT(userKey) --当存在时
DO UPDATE --更新字符串
SET state=excluded.state,--使用固定名称的“表” excluded
`
}
async function load(entity){
const info = (await (db.sql`SELECT * FROM playerstate WHERE userKey=${entity.player.userKey} limit 1`))[0]
if(!info)return null;
entity=JSON.parse(info)
return entity
}
async function allPlayerList(){//调用这个函数
const dict = await db.sql`SELECT * FROM playerstate`
return dict.map(d => JSON.parse(d.state))
}
world.onPlayerJoin(({entity})=>{load(entity)})
world.onPlayerLeave(({entity})=>{save(entity)})
world.onPress(({ button, entity }) => {button==Box3ButtonType.ACTION1?save(entity):0})

原本我要写一个万能sql代码a
能记录下玩家的全部状态( )
这样就再也不担心sql问题了
但如你所见( )又遇到了一个从未见过的bug ( 恼
报错信息:
typeerror:Converting circular structure to JSON
--> starting at object with constructor 'Box3Entity'
| property 'player' -> object with constructor 'Box喵layer'
--- property 'cameraEntity' closes the circle
报错行:
VALUES(${entity.player.userKey},${JSON.stringify(entity)})--将玩家实体对象转换为字符串
青空冰海简单说就是对象中存在循环调用
因为entity.player.cameraEntity指向的是一个实体对象,而这个对象也包含entity.player.cameraEntity键,这样就会套娃,所以就报错啦
存几个要保持的属性就好了
点赞2
评论
KO轩awatypeerror:将循环结构转换为JSON
-->从具有构造函数“Box3Entity”的对象开始
|属性“player”->具有构造函数“Box喵layer”的对象
---属性“cameraEntity”关闭圆
点赞0
评论