Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   вопрос про Delete b form (https://javascript.ru/forum/node-js-io-js/82893-vopros-pro-delete-b-form.html)

Konstantin47 28.07.2021 22:32

вопрос про Delete b form
 
форматировал, можно вернуться к теме 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 obiek
    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)
    // читаем актуальные данные
    const weather = JSON.parse(fs.readFileSync("weather.json"));
    // dodać do nich nową pogodę
    weather.push(newWeather);
    // записать изменения
    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);
});

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)
        }

<!DOCTYPE html>
<meta charset="utf-8">
<title>Test</title>
</head>

<body>

    <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>

    <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>
        <input type="submit" value="POST">
    </form>
    <br>

    <form action="//127.0.0.1:8081/process_delete" method="DELETE">
        Location: <input type="text" id="1" name="location"><br><br>
        temperature: <input type="text" id="2" name="temperature"><br><br>
        humidity: <input type="text" id="3" name="humidity"><br><br>
        pressure: <input type="text" id="4" name="pressure"><br><br>
        <input type="submit" value="DELETE"><br>
    </form>
</body>

</html>


Html
вопрос, метод post или все таки delete
В форме же input не должно ж ничего появляться? что мол, файл json прочитан, input же пустой по идее будет
отдельно вынес id, чтобы удалять этот массив.
и еще вопрос, в самом удаление html button точно также управляется, как и в пост , гет?
да я ссоздал файл json cпустым массивом и данные с пост в него нормально записываются и показываются в браузере
Гет тоже нормально все показывает
ps проблема моя с удалением пост


Спасибо
Редактировать/удалить сообщение

Rise 28.07.2021 23:40

Konstantin47, отформатируй код, удали пустые строки и посторонние символы (красные точки), это не сложно.

Konstantin47 29.07.2021 01:12

Цитата:

Сообщение от Rise (Сообщение 539009)
Konstantin47, отформатируй код, удали пустые строки и посторонние символы (красные точки), это не сложно.

готово

ksa 29.07.2021 08:08

Цитата:

Сообщение от Konstantin47
weather.remove

Пример из книжки?
Меня там удивило использование этого метода. Такого вроде нет в массиве.
Цитата:

Сообщение от Konstantin47
var id = req.param("id");

Если верить POST - добавление происходит в простой массив...
А потом как-то пытаются удаление делать по _id...

Да и сам возврат из delete() довольно странный. Т.е. не понятно как вообще доберутся до перезаписи самого "обновленного" файла.
Цитата:

Сообщение от Konstantin47
const weather = JSON.parse(fs.readFileSync("weather.json"));

Посмотри чего там тебе возвращают...

voraa 29.07.2021 10:13

app.delete('/delete/:id', function(req, res) {

Мне кажется, что бы это сработало, должно быть быть обращение к серверу с методом DELETE. А у вас все формы с method GET или POST

ksa 29.07.2021 11:24

Цитата:

Сообщение от voraa
Мне кажется, что бы это сработало, должно быть быть обращение к серверу с методом DELETE

Все верно. :yes:

Rise 29.07.2021 12:31

Цитата:

Сообщение от Konstantin47
готово

Нет. Вы просто весь пост туда засунули? Это так не работает. Код это то что у вас в листингах находится, причем в первом листинге у вас код JS, а во втором код HTML. У каждого кода свой бьютифайер: Beautify JavaScript и Beautify HTML. Остальной текст поста не является кодом. Вы разве не видите что ваш код не упорядочен?

Konstantin47 30.07.2021 02:29

в бьютифул я вставлял только js. html я вообще не трогал. убрал пробелы и все. я не знаю, что еще не упорядочено. кроме кода просто вопросы
1. весь delete просто, как пример кода был. Фильтр да, с учебника, так он мне и пригодится. Но все ж уперлось в. как form cоединить с этим всем. Если я не понимаю, что задать в форме html , какой метод
и, как выводить это на button. будет ли работать, как get и post
2. я не понимаю, должно ли в input показывать данные с прочитанного json в delete ( по логике нет)

Rise 30.07.2021 06:19

Цитата:

Сообщение от Konstantin47
в бьютифул я вставлял только js.

То что вы сделали это не форматирование кода.

Цитата:

Сообщение от Konstantin47
html я вообще не трогал.

Почему? Это тоже надо.

Цитата:

Сообщение от Konstantin47
убрал пробелы и все.

То что вы выровняли всё по одной линии это не форматирование, а скорее наоборот.

Цитата:

Сообщение от Konstantin47
я не знаю, что еще не упорядочено.

Форматирование нужно не для красоты или моей прихоти, а чтобы ваш код был читаем. Сейчас ваш код не читаем! То что вам так не кажется, не значит что это нормально. Вы как не программист этого не ощущаете, поэтому я вам говорю об этом. Всё что от вас требуется это открыть сайт beautifier.io, выбрать Beautify JavaScript, взять ваш код JS, вставить, нажать Beautify Code, перенести сюда, затем выбрать Beautify HTML, взять ваш код HTML, вставить, нажать Beautify Code, перенести сюда. Всё. Потом проверить ваш код HTML через валидатор, так как у вас в нем много ошибок, исправить их.

А потом уже про вопросы думать. Но если для вас это слишком трудно или вам лень, то и не стоит тогда за программирование браться вообще, потому что это самое элементарное что придется делать всегда.

PS: код из поста можно копировать (без цифр строк) через иконки что появляются при наведении.

Konstantin47 30.07.2021 19:41

Я наоборот за, чтобы код был читаем и за форматирование. в html не было красных точек и я просто поудалял пробелы. так и с js пробелы поудалял и красные точки и все, я о другом и не знал. сейчас переделаю

Rise 30.07.2021 22:50

Konstantin47, если вы будете противоречить себе так, то сложно будет вам помочь:

Цитата:

Сообщение от Konstantin47
html я вообще не трогал.

VS
Цитата:

Сообщение от Konstantin47
в html не было красных точек и я просто поудалял пробелы.


Konstantin47 30.07.2021 23:41

Цитата:

Сообщение от Rise (Сообщение 539034)
Konstantin47, если вы будете противоречить себе так, то сложно будет вам помочь:


VS

Естественно я html файл загрузил и посмотрел на наличие красных точек. Пробелы тоже удалил. Но раз не было точек - значит не трогал.
ps мне вообще стыдно, что я не знал об этом , я бы назвал стандартизаторе "красивый код", о валидаторе знал.
Поэтому я и не нажимал там ничего, только точки удалил.
ps2 мне абсолютно не лень, что надо поправить, исправить, привести в порядок, чтобы донести нормально, просто нужен был образец, а так ну гост, стандартизация.

Я все сделал по инструкции, сейчас должно быть форматировано и ошибки исправил

Konstantin47 31.07.2021 19:19

Цитата:

Сообщение от ksa (Сообщение 539015)
Пример из книжки?
Меня там удивило использование этого метода. Такого вроде нет в массиве.

Если верить POST - добавление происходит в простой массив...
А потом как-то пытаются удаление делать по _id...

Да и сам возврат из delete() довольно странный. Т.е. не понятно как вообще доберутся до перезаписи самого "обновленного" файла.

Посмотри чего там тебе возвращают...

Post - да, именно простой массив. id и Delete через id это я отдельно стал думать. Чтобы, чем-то зацепиться за элемент

voraa 31.07.2021 21:26

Увы.
В HTML в form у атрибута method значения могут быть только GET или POST. Любое другое рассматривается как GET.

HTML Living Standard — Last Updated 30 July 2021
https://html.spec.whatwg.org/multipa...attr-fs-method

Значит надо либо обращаться к серверу через AJAX (fetch) - там DELETE можно использовать.
Либо обращаться с методом POST, а на сервере ловить нужный path (/process_delete)

Konstantin47 01.08.2021 01:03

Цитата:

Сообщение от voraa (Сообщение 539046)
Увы.
В HTML в form у атрибута method значения могут быть только GET или POST. Любое другое рассматривается как GET.

HTML Living Standard — Last Updated 30 July 2021
https://html.spec.whatwg.org/multipa...attr-fs-method

Значит надо либо обращаться к серверу через AJAX (fetch) - там DELETE можно использовать.
Либо обращаться с методом POST, а на сервере ловить нужный path (/process_delete)

ps значит post было правильно ( читая комментария, delete поставил про форматировании)
Можно уточнить 2 вопроса
1. в Delete button точно также будет работать, как и в GET, POST?
2. в окнах input в Delete ничего же не должно само появляться, когда DELETE данные массива прочитает для удаления?
Спасибо

voraa 01.08.2021 07:44

Цитата:

Сообщение от Konstantin47
ps значит post было правильно

Нет.
У вас на сервере (в Node) стояло

app.delete('/delete/:id', function(req, res) {

app.delete сработает только если обращение к серверу идет с методом DELETE (как нибудь с помощью fetch, например)

Если в форме сделать метод POST (или GET), то и на сервере надо обрабатывать обращение с этим методом. И смотреть на путь запроса

app.post('/process_delete', function(req, res) {
или
app.get('/process_delete', function(req, res) {

тогда и необходимые параметры можно передать.

Rise 06.08.2021 19:12

Konstantin47,
То что тебе надо похоже по сути работы на "todo list", и можешь начать с него, примеров по нему много, можно сказать что это базовое приложение.

Клиентская часть: https://www.google.com/search?q=todo+list+js&tbm=isch
Клиентская часть (Bootstrap): https://www.google.com/search?q=todo...strap&tbm=isch

Серверная часть (Express): https://www.google.com/search?q=todo...ss+js&tbm=isch


Часовой пояс GMT +3, время: 04:12.