Javascript 如何使用Node和Mongoose添加具有更新功能的按钮

Javascript 如何使用Node和Mongoose添加具有更新功能的按钮,javascript,node.js,express,mongoose,crud,Javascript,Node.js,Express,Mongoose,Crud,我已经创建了一个带有事件的mongoose db,每个事件都在一个引导卡中。我正在试图找出一种方法,如何将管理员重定向到一个页面,在那里他可以更新事件卡并保存到我的mongoose db 我的问题是,我已经有了一个带有删除操作的卡的表单,我需要能够有另一个。我的想法是添加一个链接,该链接将重定向到update_page.ejs,管理员可以在其中更改该事件的形式并保存它们 admin.ejs页面的代码 <% events.forEach( function (event) { %>

我已经创建了一个带有事件的mongoose db,每个事件都在一个引导卡中。我正在试图找出一种方法,如何将管理员重定向到一个页面,在那里他可以更新事件卡并保存到我的
mongoose db

我的问题是,我已经有了一个带有删除操作的卡的表单,我需要能够有另一个。我的想法是添加一个链接,该链接将重定向到
update_page.ejs
,管理员可以在其中更改该事件的形式并保存它们

admin.ejs页面的代码

<% events.forEach( function (event) { %>
      <form class="form-events" action="/delete" method="post">

        <div class="card col-lg-3" style="width: 18rem;">

          <img class="card-img-top">
          <div class="card-body">

            <h5 class="card-title"><%= event.title %></h5>
            <p class="card-text"><%= event.description %></p>
            <p class="card-text"><%= event.date %> </p>
            <p class="card-text"><%= event.capacity %></p>

            <a href="/create_event" class="btn btn-primary">Update</a>
            <button name="deleteBtn" value="<%=event._id%>" type="submit" class="btn btn-danger">Delete</button>
          </div>
        </div>

        <% }); %>
      </form>
//Create new event route.
app.post("/create_event", function (req, res) {

  const event = new Event({
    title: req.body.ev_title,
    description: req.body.ev_desc,
    date: req.body.ev_date,
    capacity: req.body.ev_cap,
  });

  event.save(function (err) {
    if (err) {
      console.log(err);
    } else {
      res.redirect("/admin");
    }
  });
});

// Delete an event
app.post("/delete", function (req, res) {

  const deletedItemId = req.body.deleteBtn;

  Event.findByIdAndDelete(deletedItemId, function (err) {
    if (!err) {
      console.log("Successfully deleted");
      res.redirect("/admin");
    } else {
      console.log(err);
    }
  });
});
p.S我的
删除路线的解决方案是否正确?
我为所有的细节感到抱歉,但我对这个完全陌生,而且这个项目的最后期限即将到来

谷歌搜索了所有这些方法,但现在文档对我来说似乎有点太技术化了。

你可以简单地向节点应用程序添加另一条路径,如

// Update an event.
app.post("/update/:id", function (req, res) {
  const _id = req.params.id;
  const event = new Event({
    title: req.body.ev_title,
    description: req.body.ev_desc,
    date: req.body.ev_date,
    capacity: req.body.ev_cap,
  });

  event.findOne({ _id }, '_id title description date capacity', function (err, data) {
    if (err) {
      console.log(err);
    } else {
      res.render('path to create_data.ejs', { event : data });
    }
  });
});
在create_data.ejs文件中,用事件的值填充所有表单元素,如value=“”。

注意:如果要在create_data.ejs文件中进行上述更改,请确保在create_事件路由中传递空白事件属性,如

// Create an event.
app.post("/create", function (req, res) {
  res.render('path to create_data.ejs', { event : {});
});
现在,
在create_event.ejs文件中的create按钮上添加一个条件,如

<% if(_event.id){ %>
... Update button to save the updated event
<% }else{ %>
... Create button to create a new event
<% } %>

... “更新”按钮以保存更新的事件
... 创建按钮以创建新事件
最后,在admin.ejs文件中更改

<a href="/create_event" class="btn btn-primary">Update</a>


<a href="/update/<%=event._id%>" class="btn btn-primary">Update</a>



希望这能回答你的问题。我得到一个错误,事件没有定义