#node.js #fs
#node.js #fs
Вопрос:
Я пытаюсь получить некоторые данные из простой формы и записать JSON-файл, используя node JS и FS. Мне это нужно:
[{"id":1,"answer1":"C","answer2":"C"},{"id":2,"answer1":"A","answer2":"A"}]
Это код, который я написал:
const express = require("express");
const fs = require('fs');
const app = express();
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({
extended: true
}));
app.get("/", function(req, res) {
res.sendFile(__dirname "/form.html")
});
app.post("/", function(req, res) {
let result1 = req.body.question1;
let result2 = req.body.question2;
const dataFile = require("./data.json");
const userAnswers = {
id: dataFile.length 1,
answer1: result1,
answer2: result2,
};
dataFile.push(userAnswers);
fs.writeFile("data.json", JSON.stringify(dataFile), 'utf8', function(err) {
if (err) {
console.log("An error occured while writing JSON Object to File.");
return console.log(err);
}
console.log("JSON file has been saved.");
});
res.sendFile(__dirname "/form.html");
});
app.listen(3000, function() {
console.log("The server is running on 3000")
});
Это действительно работает, создается файл JSON, и когда я нажимаю на кнопку отправки, входные данные исчезают, после чего я могу продолжить ввод новых данных.
Проблема в том, что когда я обновляю страницу, последний ввод дублируется в моем JSON-файле. Я не знаю, как его сбросить. Может кто-нибудь мне помочь?
Комментарии:
1. Обратите внимание, что когда вы получаете ошибку при обработке запроса, вы ДОЛЖНЫ отправить некоторый тип ответа на входящий запрос. Вы можете сделать
res.sendStatus(500)
, если вам нечего лучше отправить.
Ответ №1:
Похоже, что ваше обновление повторно отправляет предыдущие данные (некоторые браузеры запрашивают вас перед этим).
Вы могли бы помешать этому, заменив:
res.sendFile(__dirname "/form.html");
в вашем app.post()
обработчике с этим:
res.redirect("/");
Отображение конечного пользователя останется прежним, но обновление на этой странице больше не может повторно отправить предыдущую запись формы. Это просто перезагрузит форму без каких-либо других побочных эффектов.