Я следовал руководству по созданию небольшой гостевой книги с nodeJS и ajax, теперь я пытаюсь немного расширить ее, добавив такие функции, как удаление определенной записи по нажатию кнопки, но моя проблема в том, как получить индекс массива записи, на которую я нажал ?? Я знаю, что могу получить его в моем JS файле с
$('.entrygrid .entry .del').click(function() {
console.log($(this).parent().parent().index());
});
, но как мне тогда получить это значение в моем файле сервера? так что я могу удалить элемент [индекс массива, который я щелкнул] в моем файле JSON?
Это код, который я получил до сих пор, и все работает, но я хочу удалить записи. (Я знаю, мой код выглядит ужасно, я впервые делаю что-нибудь с node.js)
приложением. js
'use strict';
let idk = require('./idk.js'); // lol
let express = require('express');
let bodyParser = require('body-parser');
let GuestbookEntry = require('./src/GuestbookEntry.js'); // guestbook requirement
let fs = require('fs');
fs.readFile('./data.json', 'utf-8', (err, data) => {
if (err) throw err;
let d = JSON.parse(data);
let entries = [];
for(let entry of d) {
entries.push(new GuestbookEntry(entry.author, entry.title, entry.content, entry.date));
}
// Start Server
let app = express();
app.set('view engine', 'ejs');
app.set('views', './views');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static('./public'));
let text;
if (entries.length < 2) {
text = 'entry';
} else {
text = 'entries';
}
app.get('/index', (req, res) => {
res.render('index', {
entries: entries,
text: text
});
});
app.post('/guestbook/new', (req, res) => {
let tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
let localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
let currentDate = localISOTime.slice(0, 10).replace(/-/g, "/");
let currentTime = localISOTime.slice(11, 19);
let date = currentDate + ", " + currentTime;
let content = req.body.content;
let title = req.body.title;
let author = req.body.author;
let newEntry = new GuestbookEntry(author, title, content, date);
entries.push(newEntry);
// write data into the file data json
fs.writeFileSync('./data.json', JSON.stringify(entries));
res.redirect('/index');
if (entries.length < 2) {
text = 'entry';
} else {
text = 'entries';
}
});
app.post('/guestbook/del', (req, res) => {
//delete the entry please
});
app.listen(1337, () => {
console.log('oof');
});
});
данных. json
[{
"author": "a",
"title": "a",
"content": "a",
"date": "2020/01/30, 08:40:07"
}, {
"author": "test",
"title": "test",
"content": "test",
"date": "2020/01/30, 08:41:24"
}, {
"author": "test",
"title": "test",
"content": "test",
"date": "2020/01/30, 08:42:23"
}]
Гостевая книга. js
"use strict";
class GuestbookEntry {
constructor(author, title, content, date) {
this.author = author;
this.title = title;
this.content = content;
this.date = date;
}
}
module.exports = GuestbookEntry;
index.e js
<html>
<head>
<title>index</title>
<link rel="stylesheet" href="/css/app.css">
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="/js/index.js"></script>
<div class="all">
<div class="main">
<h1>node.js ,,,</h1>
<a href="http://localhost:1337/gay">gay</a>
<div class="entrycount"><span></span></div>
<div class="entrygrid">
<% for(let entry of entries) { %>
<div class="entry">
<strong><%= entry.author %></strong>
<h3><%= entry.title %></h3>
<p><%= entry.content %></p>
<p><%= entry.date %></p>
<form method="POST" action="/guestbook/del">
<button class="del" type="submit"></button>
</form>
</div>
<% } %>
</div>
<form class="new-entry" method="POST" action="/guestbook/new">
<input type="text" name="author" placeholder="Author">
<input type="text" name="title" placeholder="Title">
<textarea name="content" placeholder="Your text here!" rows="5" cols="20" ></textarea>
<button type="submit">Send!</button>
</form>
</div>
</div>
</body>
</html>
index. js
$(document).ready(function(){
let currentDate;
let currentTime;
let tzoffset;
let localISOTime;
let text;
if ($('.entrygrid .entry').length < 2) {
text = "entry";
} else {
text = "entries";
}
$('.entrycount span').text($('.entrygrid .entry').length + " " + text);
/*$(".new-entry").submit(function(e) {
e.preventDefault();
tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
currentDate = localISOTime.slice(0, 10).replace(/-/g, "/");
currentTime = localISOTime.slice(11, 19);
let author = $('input[name="author"]').val();
let title = $('input[name="title"]').val();
let content = $('textarea[name="content"]').val();
let date = currentDate + ", " + currentTime;
$.ajax({
url: '/guestbook/new',
method: "POST",
data: {
"author": author,
"title": title,
"content": content,
"date": date,
},
success: function(data) {
let div = $.parseHTML("<div></div>");
$(div).html(data);
let newEntries = $(".entry", div);
$(".entrygrid .entry").remove();
newEntries.each(function(i, newEntry) {
$(".entrygrid").append(newEntry);
});
$('.entrycount span').text($('.entrygrid .entry').length);
//console.log(data);
}
});
//alert(author + " " + title + " " + content);
});*/
});