post read write JSON
Здравствуйте!
Можете подсказать, выдает ошибку - TypeError: weather.push is not a function at C:\Users\PC\server.js:36:21 - проблема в JSON файле? вначале была ошибка SyntaxError: Unexpected token c in JSON at position 1 at JSON.parse () http://127.0.0.1:8081/favicon.ico («default-src»). отправил в валидатор, исправил и появиласт ошибка, что это не функция. Задача была - данные ввожу в HTMl форме. Записываю их в JSON. Потом считываю и могу изменить var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var fs = require('fs'); const path = require('path'); // Create application/x-www-form-urlencoded parser var urlencodedParser = bodyParser.urlencoded({ extended: false }) app.use(express.static('public')); app.get('/index.html', function (req, res) { res.sendFile( __dirname + "/" + "index.html" ); }) app.post('/process_post', urlencodedParser, (req, res) => { // należy utworzyć nowy obiekt const newWeather = { location: req.body.location, temperature: req.body.temperature, humidity: req.body.humidity, pressure: req.body.pressure }; // pobrać aktualne dane z pogodą const weather = JSON.parse(fs.readFileSync("weather.json")); // dodać do nich nową pogodę weather.push(newWeather); // i napisać zapisać dane do pliku fs.writeFileSync("weather.json", JSON.stringify(weather)); }); app.delete('/process_delete', function (req, res) { console.log("Got a DELETE request for /del"); res.send('<h1>DELETE</h1>'); }) var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("Example app listening at //%s:%s", host, port) }) <body> <center> <form action = "//127.0.0.1:8081/process_get" method = "GET"> <br> Location: <input type = "text" name = "Lokalizację"> <br> <br> <br> temperature: temperaturę w st. C <input type="number" name="temperaturę"> C<br><br> humidity: wilgotność powietrza w % <input type="number" name="wilgotność" > %<br><br> pressure: ciśnienie w hPa <input type="number" name="ciśnienie" > hPa<br><br> <br> <input type = "submit" value = "GET"> </form> <center> <form action = "//127.0.0.1:8081/process_post" method = "POST"> Location: <input type = "text" name = "Lokalizację"> <br> <br> <br> temperature: temperaturę w st. C <input type=" text" name="temperaturę"> C<br><br> humidity: wilgotność powietrza w % <input type="text" name="wilgotność" > %<br><br> pressure: ciśnienie w hPa <input type="text" name="ciśnienie" > hPa<br><br> <br> <input type = "submit" value = "POST"> </form> <center> <form action = "//127.0.0.1:8081/" method = "DELETE"> Location: <input type = "text" name = "Lokalizację"> <br> <br> <br> temperature: temperaturę w st. C <input type="number" name="temperaturę"> C<br><br> humidity: wilgotność powietrza w % <input type="number" name="wilgotność" > %<br><br> pressure: ciśnienie w hPa <input type="number" name="ciśnienie" > hPa<br><br> <br> <input type = "submit" value = "DELETE"> </form> </body> так я оформил weather.JSON { "location": "req.body.location", "temperature": "req.body.temperature", "humidity": "req.body.humidity", "pressure": "req.body.pressure" } ps все работало кроме записи и чтения в JSON, c cамим файлом JSON cовсем не уверен, пробовал по разному его оформить CПАСИБО ЗА КОММЕНТАРИИ |
можно вернуться к теме delete
переделал, сделал запросы GET, POST ( читало и записывало в Json)
код, который работает var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var fs = require('fs'); const path = require('path'); app.use(bodyParser.urlencoded({ extended:true})); app.use(express.static(__dirname+'/public')); app.post('/process_post', (req, res) => { // należy utworzyć nowy obiekt const newWeather = { id: 1, location: req.body.location, id: 2, temperature: req.body.temperature, id: 3, humidity: req.body.humidity, id:4, pressure: req.body.pressure }; console.log(req.body) // pobrać aktualne dane z pogodą const weather = JSON.parse(fs.readFileSync("weather.json")); // dodać do nich nową pogodę weather.push(newWeather); // i napisać zapisać dane do pliku fs.writeFileSync("weather.json", JSON.stringify(weather)); res.json(newWeather); }); app.get('/process_get', function (req, res) { const records = JSON.parse(fs.readFileSync("weather.json")); const weather = JSON.parse(fs.readFileSync("weather.json")); res.json(weather); }); // не работает app.delete('/delete/:id', function(req, res) { const weather = JSON.parse(fs.readFileSync("weather.json")); var id = req.param("id"); weather.remove({ _id: id }, function(err){ if (err) { console.log(err) } else { return res.send("Removed"); } }); fs.writeFileSync("weather.json", JSON.stringify(weather)); res.json(newWeather); }); // пример для себя фильтра let someUsers = users.filter(item => item.id < 3); var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log("Example app listening at //%s:%s", host, port) }) <body> <center> <form action = "//127.0.0.1:8081/process_get" method = "GET"> <br> Location: <input type = "text" name = "location"> <br> <br> <br> temperature: temperaturę w st. C <input type=" text" name="temperature"> C<br><br> humidity: wilgotność powietrza w % <input type="text" name="humidity" > %<br><br> pressure: ciśnienie w hPa <input type="text" name="pressure" > hPa<br><br> <br> <input type = "submit" value = "GET"> </form> <center> <form action = "//127.0.0.1:8081/process_post" method = "POST"> Location: <input type = "text" name = "location"> <br> <br> <br> temperature: temperaturę w st. C <input type=" text" name="temperature"> C<br><br> humidity: wilgotność powietrza w % <input type="text" name="humidity" > %<br><br> pressure: ciśnienie w hPa <input type="text" name="pressure" > hPa<br><br> <br> <input type = "submit" value = "POST"> </form> <br> <center> <form action = "//127.0.0.1:8081/process_delete" method = "POST"> <select> <option> Location: <input type = "text" id="1" name = "location"></option> <option>temperature: <input type=" text" id="2" name="temperature"> </option> <option>humidity: <input type="text" id="3" name="humidity" > </option> <option>pressure: <input type="text" id="4" name="pressure" ></option> </select> <input type = "submit" value = "DELETE"> </form> </body> Html вопрос, метод post или все таки delete В форме же input не должно ж ничего появляться? что мол, файл json прочитан, input же пустой по идее будет отдельно вынес id, чтобы удалять этот массив. и еще вопрос, в самом удаление html button точно также управляется, как и в пост , гет? да я ссоздал файл json cпустым массивом и данные с пост в него нормально записываются и показываются в браузере Гет тоже нормально все показывает ps проблема моя с удалением пост Спасибо |
Часовой пояс GMT +3, время: 03:34. |