javascript - 如何在 Node 博客应用程序中保留分页页面?

标签 javascript node.js express ejs

我正在使用 Express 构建博客站点。它具有编辑和删除功能。我试图重定向到我在删除或编辑现有帖子时在根路由中离开的分页的同一页面。现在,如果我删除第 2 页上的帖子,它会将我重定向回第 1 页。如果我删除第 2 页上的博客帖子,也会发生同样的事情。但我希望这两个功能都重定向回第 1 页2. 感谢任何帮助。

这是前端的编辑页面。

<form action="/edit/<%=id %>?_method=PUT?page=<%= currentPage %>" method="POST">
  <div class="form-group">
    <label for="postTitle">Title</label>
    <input type="text" name="postTitle" class="form-control" id="postTitle" autocomplete="off" value="<%= title %>">
    <label for="postBody">Post</label>
    <textarea name="postBody" class="form-control" autocomplete="off" rows="8"><%= content %></textarea>
  </div>
    <button type="submit" name="button" class="btn btn-primary">Publish</button>
</form>

这是前端删除函数的表单。

  <form action="/delete?page=<%= currentPage %>" method="POST">
    <button type="submit" name="delete" value="<%= post._id %>" class="btn btn-outline-danger">DELETE</button>
  </form>

这里是root,在后端删除和编辑路由。

// Root route that displays all posts stored in database.
app.get("/", (req, res) => {

  let perPage = 3;
  let totalItems;
  let currentPage = parseInt(req.query.page) || 1;

  Post.find()
    .countDocuments()
    .then(count => {

      totalItems = count;

      Post.find()
        .sort({ date: -1 })
        .skip((currentPage - 1) * perPage)
        .limit(perPage)
        .then(posts => {
          console.log(currentPage);
          res.render("home", {
            posts,
            currentPage,
            totalItems
          });

        });
    })
});


// Route for updating specific post.
app.put('/edit/:id', (req, res) => {
  let currentPage = parseInt(req.query.page) || 1;
  const postEdit = {
    title: req.body.postTitle,
    content: req.body.postBody
  };
  Post.findByIdAndUpdate(req.params.id, postEdit, (err, post) => {
    if (err) {
      console.log(err);
    } else {
      res.redirect("/?page=" + currentPage);
    }
  });
});

// Route for deleting specific post.
app.post("/delete", (req, res) => {
  const deletePost = req.body.delete;
  let currentPage = parseInt(req.query.page) || 1;
  Post.findByIdAndRemove(deletePost, (err) => {
    if (err) {
      console.log(err);
    } else {
      res.redirect("/?page=" + currentPage);
    }
  });
});

最佳答案

在访问 API 时只发送状态而不是从 API 本身重定向是个好主意。我建议你也这样做。一旦您在客户端中点击 API,您将获得 200(成功)或 500(执行操作时出错)之类的 http 状态代码或其他任何东西。根据 http 状态代码,仅在客户端进行重定向(如果需要) .

app.put('/edit/:id', (req, res) => {

 const postEdit = {
  title: req.body.postTitle,
  content: req.body.postBody
 };

Post.findByIdAndUpdate(req.params.id, postEdit, (err, post) => {
   if (err) {
   console.log(err);
    res.status(500).send(err);
   } else {
    res.status(200).send();// send status only 
   }
 });
});

// Route for deleting specific post.
app.post("/delete", (req, res) => {
 const deletePost = req.body.delete;

  Post.findByIdAndRemove(deletePost, (err) => {
  if (err) {
    console.log(err);
    res.status(500).send(err);
  } else {
    res.status(200).send(); // send status only 
  }
 });
});

关于javascript - 如何在 Node 博客应用程序中保留分页页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55720471/

相关文章:

node.js - 我是否以某种方式破坏了 api?

node.js - 使用 Passport 注册后防止用户身份验证

javascript - 在 URL 路径中的名称前使用 ":"的目的是什么?

javascript - 套接字客户端返回变量

node.js - 从 Node js在cassandra中插入BigInt

javascript - 从 javascript 脚本重定向 document.write

node.js - 快速路由器参数验证

javascript - 使用 Express 上的 API key + Secret 保护我的 RESTful API

javascript - jssor 箭头排列错误

javascript - Jquery Select element 2 positions further - .next().next() 的另一种方式