Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用nodeJS单击获取数组索引/如何删除nodeJS服务器上的留言簿条目_Javascript_Jquery_Node.js_Ajax - Fatal编程技术网

Javascript 使用nodeJS单击获取数组索引/如何删除nodeJS服务器上的留言簿条目

Javascript 使用nodeJS单击获取数组索引/如何删除nodeJS服务器上的留言簿条目,javascript,jquery,node.js,ajax,Javascript,Jquery,Node.js,Ajax,我按照一个教程用nodeJS和ajax构建了一个小留言簿,现在我试图通过添加一些功能来扩展它,比如点击一个按钮就删除一个特定的条目,但我的问题是如何获得我点击的条目的数组索引??我知道我可以在我的JS文件中使用 $('.entrygrid .entry .del').click(function() { console.log($(this).parent().parent().index()); }); 但是我如何在服务器文件中获得这个值呢?这样我就可以删除JSON文件中的[arra

我按照一个教程用nodeJS和ajax构建了一个小留言簿,现在我试图通过添加一些功能来扩展它,比如点击一个按钮就删除一个特定的条目,但我的问题是如何获得我点击的条目的数组索引??我知道我可以在我的JS文件中使用

$('.entrygrid .entry .del').click(function() {
    console.log($(this).parent().parent().index());
});
但是我如何在服务器文件中获得这个值呢?这样我就可以删除JSON文件中的[array index I clicked]项了

这是我到目前为止得到的代码,它都在工作,但我想删除条目。(我知道我的代码看起来很糟糕,这是我第一次用node.js做任何事情)

app.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');
    });

});
"use strict";

class GuestbookEntry {
    constructor(author, title, content, date) {
        this.author = author;
        this.title = title; 
        this.content = content;
        this.date = date;
    }
}

module.exports = GuestbookEntry;
<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>
$(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);
    });*/



});
GuestbookEntry.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');
    });

});
"use strict";

class GuestbookEntry {
    constructor(author, title, content, date) {
        this.author = author;
        this.title = title; 
        this.content = content;
        this.date = date;
    }
}

module.exports = GuestbookEntry;
<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>
$(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);
    });*/



});
index.ejs

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

});
"use strict";

class GuestbookEntry {
    constructor(author, title, content, date) {
        this.author = author;
        this.title = title; 
        this.content = content;
        this.date = date;
    }
}

module.exports = GuestbookEntry;
<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>
$(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);
    });*/



});

指数
node.js,,,

发送!
index.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');
    });

});
"use strict";

class GuestbookEntry {
    constructor(author, title, content, date) {
        this.author = author;
        this.title = title; 
        this.content = content;
        this.date = date;
    }
}

module.exports = GuestbookEntry;
<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>
$(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);
    });*/



});
$(文档).ready(函数(){
让我们看看日期;
让我们来看看时间;
让我们来抵消;
让我们慢慢来;
让文字;
if($('.entrygrid.entry')。长度<2){
text=“输入”;
}否则{
text=“条目”;
}
$('.entrycount span').text($('.entrygrid.entry').length+“”+text);
/*$(“.new entry”).submit(函数(e){
e、 预防默认值();
tzoffset=(新日期()).getTimezoneOffset()*60000;//偏移量(毫秒)
localISOTime=(新日期(Date.now()-tzoffset)).toISOString().slice(0,-1);
currentDate=localISOTime.slice(0,10)。替换(/-/g,“/”);
currentTime=LocalSoTime.slice(11,19);
让author=$('input[name=“author”]).val();
让title=$('input[name=“title”]').val();
让content=$('textarea[name=“content”]”)。val();
设日期=当前日期+“,”+当前时间;
$.ajax({
url:“/guestbook/new”,
方法:“张贴”,
数据:{
“作者”:作者,
“头衔”:头衔,
“内容”:内容,
“日期”:日期,
},
成功:功能(数据){
让div=$.parseHTML(“”);
$(div).html(数据);
设newEntries=$(“.entry”,div);
$(“.entrygrid.entry”).remove();
每个函数(i,newEntry){
$(“.entrygrid”).append(newEntry);
});
$('.entrycount span').text($('.entrygrid.entry').length);
//控制台日志(数据);
}
});
//警告(作者+标题+内容);
});*/
});

在循环浏览JSON文件内容时,需要获取索引。 然后,您可以使用它为Guestbook对象中的索引创建一个新键,命名元素或类似内容。 我会这样做:

d.forEach((element, index) => {
  //Do Something with the index
});