node.js - node.js 为什么在重新启动服务器后,保存在 json 文件中的 post 请求中的数据会重置为初始空数组?
问题描述
我正在使用 express node.js,我正在尝试将来自 post 请求的数据保存在 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};
解决方案
我假设您在JSON.parse(fs.readFileSync(roomDB_PATH));
通话时遇到错误。每次启动服务器时都会运行此代码(当您将文件导入路由器文件时),如果遇到错误,则会将文件重置为空数组。尝试记录错误以查看导致它的原因。您目前正在完全抑制错误,无法说明它失败的原因。
推荐阅读
- salt-stack - 将主机 IP 地址传递给 cmd.run 和 ini 文件
- r - 从没有 OAuth 令牌的公共 Google Drive 文件夹下载光栅文件
- macos - gfortran 是否可以使用 MOLD 进行分配?
- r - 如果在闪亮的反应
- asynchronous - 从屏幕返回数据并将其添加到流中
- google-apps-script - 将导入 json 转换为使用谷歌表格中的数组公式
- azure-functions - python azure 函数 v2 msiauthentication
- c# - 可以接收委托并在每个委托中每 N 次调用一次的对象
- postgresql - 使用 Grafanas 变量的时间范围图
- r - 计算根据同一数据帧中的其他两个变量更改了变量的多少值