node.js 为什么重启服务器后,保存在json文件中的post请求数据会重置为初始空数组?

问题描述 投票:0回答:1

我正在使用express node.js,我试图将post请求中的数据保存在json文件中,但由于某些原因,当我重新启动服务器时,我的post请求中的数据应该保存在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};

node.js json express http fs
1个回答
1
投票

我猜想你是遇到了一个错误。JSON.parse(fs.readFileSync(roomDB_PATH)); 调用。这段代码在每次启动服务器时都会运行(当你把文件导入路由器文件时),如果遇到错误,它就是把文件重置为一个空数组。尝试记录错误,看看是什么原因造成的。你目前完全压制了这个错误,没有办法判断它为什么会失败。

© www.soinside.com 2019 - 2024. All rights reserved.