JSON 没有正确地将对象转换为字符串
JSON is not properly turning an object into a string
我正在制作游戏并处理帐户。当我 JSON 将对象字符串化并将其保存到文件中时,它有时(偶尔和随机)写入:
{"example@domain.cm":{"email":"example@domain.cm","password":"myPassword","token":"c26a2a66-77f8-43d7-aa92-14da81979386"} >}< "example@domain.com":{"email":"example@domain.com","password":"myPassword","token":"209758d0-9a6e-4e99-835a-21595b822796"}}
当我期待时:
{"example@domain.cm":{"email":"example@domain.cm","password":"myPassword","token":"c26a2a66-77f8-43d7-aa92-14da81979386"} >,< "example@domain.com":{"email":"example@domain.com","password":"myPassword","token":"209758d0-9a6e-4e99-835a-21595b822796"}}
我的代码:
const fs = require('fs');
const { v4: newUuid } = require('uuid');
function save() {
fs.writeFile('save_info/users.json', JSON.stringify(User.USERS), err => {});
}
class User {
static USERS = {};
constructor(email, password, token = newUuid()) {
this.email = email;
this.password = password;
this.token = token;
User.USERS[email] = this;
save();
}
}
这是怎么回事?
编辑
我正在使用 nodemon。每当我保存文件(users.json 除外)时,它会自动停止并启动它。我也在使用 express,因为这个脚本用于服务器部分。 (这是一个私人项目,不求完美,只是学习)
谢谢@jabaa
他们指出了一个警告,即在不等待回调的情况下多次使用 fs.writeFile()
是不安全的。这是解决方案:
var CAN_SAVE = true;
var PENDING_SAVE = false;
function save() {
if (!CAN_SAVE) {
PENDING_SAVE = true;
return;
}
PENDING_SAVE = false;
CAN_SAVE = false;
fs.writeFile('save_info/users.json', JSON.stringify(User.USERS), err => {
CAN_SAVE = true;
if (PENDING_SAVE) save();
});
}
另一种解决方案是使用 fs.writeFileSync()
,这对我来说实际上可能更好......(谢谢,@Steven Spungin)
我正在制作游戏并处理帐户。当我 JSON 将对象字符串化并将其保存到文件中时,它有时(偶尔和随机)写入:
{"example@domain.cm":{"email":"example@domain.cm","password":"myPassword","token":"c26a2a66-77f8-43d7-aa92-14da81979386"} >}< "example@domain.com":{"email":"example@domain.com","password":"myPassword","token":"209758d0-9a6e-4e99-835a-21595b822796"}}
当我期待时:
{"example@domain.cm":{"email":"example@domain.cm","password":"myPassword","token":"c26a2a66-77f8-43d7-aa92-14da81979386"} >,< "example@domain.com":{"email":"example@domain.com","password":"myPassword","token":"209758d0-9a6e-4e99-835a-21595b822796"}}
我的代码:
const fs = require('fs');
const { v4: newUuid } = require('uuid');
function save() {
fs.writeFile('save_info/users.json', JSON.stringify(User.USERS), err => {});
}
class User {
static USERS = {};
constructor(email, password, token = newUuid()) {
this.email = email;
this.password = password;
this.token = token;
User.USERS[email] = this;
save();
}
}
这是怎么回事?
编辑 我正在使用 nodemon。每当我保存文件(users.json 除外)时,它会自动停止并启动它。我也在使用 express,因为这个脚本用于服务器部分。 (这是一个私人项目,不求完美,只是学习)
谢谢@jabaa
他们指出了一个警告,即在不等待回调的情况下多次使用 fs.writeFile()
是不安全的。这是解决方案:
var CAN_SAVE = true;
var PENDING_SAVE = false;
function save() {
if (!CAN_SAVE) {
PENDING_SAVE = true;
return;
}
PENDING_SAVE = false;
CAN_SAVE = false;
fs.writeFile('save_info/users.json', JSON.stringify(User.USERS), err => {
CAN_SAVE = true;
if (PENDING_SAVE) save();
});
}
另一种解决方案是使用 fs.writeFileSync()
,这对我来说实际上可能更好......(谢谢,@Steven Spungin)