我是初學者,并試圖保存模型todoModel成data.json,但某些元素(title, description)不會被保存。
app.js
const http = require("http");
const todoRouter = require("./routes/todo.router");
const server = http.createServer(todoRouter);
const PORT = process.env.PORT || 3000;
server.listen(PORT, () =>
console.log(`Server listening on http://localhost:${PORT}`)
);
todo.router.js
const url = require("url");
const todoController = require("../controllers/todo.controller");
const todoRouter = (req, res) => {
const urlparse = url.parse(req.url, true);
if (urlparse.pathname == "/todos" && req.method == "POST") {
todoController.createTodo(req, res);
}
};
module.exports = todoRouter;
todo.controller.js
const fs = require("fs");
class todoController {
async createTodo(req, res) {
req.on("data", (data) => {
if (data) {
todos.push(todoModel);
fs.writeFile(
"./data/data.json",
JSON.stringify(todos, null, 2),
(err) => {
if (err) throw error;
}
);
}
});
}}
todo.model.js
const { v4: uuidv4 } = require("uuid");
const fs = require("fs");
const data = fs.readFileSync("./data/data.json");
const jsondata = JSON.parse(data);
const title = jsondata.title;
const description = jsondata.description;
const todoModel ={
id: uuidv4(),
title,
description,
dateOfCreate: new Date(),
lastModified: new Date(),
check: new Boolean(false),
};
module.exports = todoModel;
保存的模型todoModel中data.json看起來像這樣:
[
{
"id": "cb996b22-d9d8-49ee-8e35-6f8bfc005268",
"dateOfCreate": "2021-11-06T14:53:28.608Z",
"lastModified": "2021-11-06T14:53:28.608Z",
"check": false
}
]
uj5u.com熱心網友回復:
您的值title并且description沒有在您的todoModel. 只需將這些值分配給物件中的適當鍵即可。
const todoModel ={
id: uuidv4(),
title: title, // add key for title
description: description, // and here add key for description
dateOfCreate: new Date(),
lastModified: new Date(),
check: new Boolean(false),
};
但問題并不止于此。您的問題是您讀取 JSON 檔案,加載其內容,然后不加任何修改地將內容寫回。在檔案中todo.controller.js,您加載todoModel,它會加載檔案的內容。然后將此內容添加到todos陣列并將其寫回檔案。你沒有對 做任何修改todoModel,所以它所做的幾乎沒有。
uj5u.com熱心網友回復:
好吧,我建議只匯出函式和常量,而不是可以更改的變數或物件。但是我寧愿在這里使用一個函式
function getTodoModel() {
const data = fs.readFileSync("./data/data.json");
const jsondata = JSON.parse(data);
const title = jsondata.title;
const description = jsondata.description;
return {
id: uuidv4(),
title,
description,
dateOfCreate: new Date(),
lastModified: new Date(),
check: new Boolean(false),
}
}
module.exports = getTodoModel
稍后您只需匯入您的函式并呼叫它:
let todoModel = getTodoModel()
變數將被評估
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/351409.html
標籤:javascript 节点.js
上一篇:無服務器呼叫錯誤:“無權執行:資源上的dynamodb:BatchWriteItem:arn:aws:...”
下一篇:避免回應機器人
