fs.writeFyleSync записывает в файл мои данные и в начале почему-то добавляет undefined
Обработчик POST запроса обращается к методу fs.writeFyleSync, который записывает данные из запроса в файл userdata.json. Но помимо этих данных перед ними так же записывается "undefined":{}
хотя этого не должно быть. Как исправить?
app.use((req, res, next) => {
let reqBodyUser = req.body.user
let reqJSON = {
[req.body.name]: req.body.url
}
const json = fs.readFileSync('userdata.json');
const parsedJson = JSON.parse(json);
parsedJson[reqBodyUser] = reqJSON
const data = JSON.stringify(parsedJson);
console.log(reqJSON)
fs.writeFileSync('userdata.json', data, 'utf-8', function(error){
if(error) return console.log(error);
console.log("Запись файла завершена");
});
next();
});
На выходе я получаю такой файл userdata.json:
{
"undefined":{},
"test":
{
"test":"test"
}
}
Примечание: при вызове метода несколько раз с разными входными данными, undefined остается один в начале, но если его стереть из файла и снова сделать запрос, строка опять появляется
Ответы (1 шт):
Скорее всего undefined возникает при чтении файла.
Для выполнения JSON.parse(json)
переменная json
должна быть строкой.
Замените чтение файла на вот такую конструкцию
let json = fs.readFileSync('./userdata.json', 'utf-8');
if (!json) {
json = '{}'
}
Файл будет считан и преобразован в строку. Если будет считан пустой файл, то будет подставлен пустой объект.
Так же, если в файле, кроме ничего, может быть не объект, то преобразование я бы вам рекомендовал обернуть в try catch
let parsedJson = {}
try {
parsedJson = JSON.parse(json);
} catch (e) {
console.error(e)
}
Обе проверки в коде будут выглядеть так:
const json = fs.readFileSync('./userdata.json', 'utf-8');
let parsedJson = {}
try {
parsedJson = JSON.parse(json);
} catch (e) {
console.error(e)
}