Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2021, 13:32
Аспирант
Отправить личное сообщение для Konstantin47 Посмотреть профиль Найти все сообщения от Konstantin47
 
Регистрация: 12.01.2021
Сообщений: 32

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ПАСИБО ЗА КОММЕНТАРИИ
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2021, 13:48
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

.push() это метод массива, значит в weather.json должен быть массив, в файле просто пустой массив [] оставь и всё. На get и delete надо тоже читать json.

Последний раз редактировалось Rise, 15.06.2021 в 13:50.
Ответить с цитированием
  #3 (permalink)  
Старый 26.07.2021, 16:06
Аспирант
Отправить личное сообщение для Konstantin47 Посмотреть профиль Найти все сообщения от Konstantin47
 
Регистрация: 12.01.2021
Сообщений: 32

можно вернуться к теме 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 проблема моя с удалением пост


Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при чтении json полученного через ajax ishurgaya Общие вопросы Javascript 7 10.12.2018 09:20
POST запрос в формате JSON pokk Общие вопросы Javascript 5 01.12.2017 16:34
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26
нужна отправка post запросов через jQuery в формате Json mstdmstd Events/DOM/Window 2 31.05.2012 15:08
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12