node.js Почему данные из почтовых запросов, сохраненные в файле json, сбрасываются в исходный пустой массив после перезапуска сервера? - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю с express node.js и пытаюсь сохранить данные из почтового запроса в файле json. но по какой-то причине, когда я перезагружаю сервер, мои данные из почтового запроса должны были быть сохранены в roomDB. json файл не сохраняется, вместо этого он сбрасывается в исходный пустой массив ... Может кто-нибудь посоветовать? большое Вам спасибо.

вот мой код

//saving function

const fs = require("fs");
exports.save =(data, PATH) =>{
    return new Promise((resolve, reject) => {
      fs.writeFile(PATH, JSON.stringify(data), function(err) {
        if (err) {
          reject(err);
        } else {
          resolve();
        }
      });
    });
  }


// code in router file to make requests

const express = require("express");
const router = express.Router();
const fs = require("fs");
const rooms = ("./roomDB.json");
const { addRoom} = require("./rooms");


router.get("/", (req, res)=>{
       fs.readFile("roomDB.json", (err, data)=>{
         if(err) return res.status(400);
         res.send(roomDB_PATH)
       })

});

router.get("/:id", (req, res)=>{
    res.send("connect to  a room");
});


router.post("/", (req, res)=>{
    let roomName = req.body;
    if(!roomName.name){
        res.status(404);
        res.end();
        return;
    }
 let room =addRoom(roomName.name);

res.status(201).send(room)

})

module.exports = router;

 */
const uuid = require("uuid");
let roomdatas;
const {save} = require("./save");
const roomDB_PATH = "roomDB.json";

try {

  roomdatas = JSON.parse(fs.readFileSync(roomDB_PATH)); 
} catch (e) {

    roomdatas = []
    save(roomdatas, roomDB_PATH);
}

const addRoom = (roomName) => {
    roomName = roomName.trim().toLowerCase();
    const existingRoom = roomdatas.find((room) => room.name === roomName);

    if (existingRoom) {
        return { error: 'chatroom has existed' };
    }
    let room = {
        name: roomName,
        id: uuid.v4(),
        messages: [],
        users: [],
        created: +new Date()
    };
    roomdatas.push(room);
    save(roomdatas, roomDB_PATH);
    return { room };
};

module.exports ={addRoom};

1 Ответ

1 голос
/ 28 апреля 2020

Я предполагаю, что вы столкнулись с ошибкой при вызове JSON.parse(fs.readFileSync(roomDB_PATH));. Этот код запускается каждый раз, когда запускается ваш сервер (когда вы импортируете файл в файл маршрутизатора), и если он обнаруживает ошибку, он сбрасывает файл в пустой массив. Попробуйте зарегистрировать ошибку, чтобы увидеть, что ее вызывает. В настоящее время вы полностью подавляете ошибку, не имея возможности определить причину ее сбоя.

...