首页  >  问答  >  正文

如何从route.post渲染节点express中的页面?

我有一个页面可以从 api 获取 100 个模因。它在表格中显示模因,每个模因都有一个详细信息按钮,可将用户带到模因的详细信息页面。我必须对 meme 路由执行 POST 请求并呈现 meme 详细信息页面。 post 请求成功,但 meme 页面未从 router.post 中的 render() 渲染。

Meme.js

var express = require("express");
var router = express.Router();
var bodyParser = require("body-parser");
var jsonParser = bodyParser.json();
var ensureLogIn = require("connect-ensure-login").ensureLoggedIn;
var ensureLoggedIn = ensureLogIn();


router.post("/", ensureLoggedIn, jsonParser, (req, res, next) => {
  const meme = req.body.meme;
  const user = req.body.user;
  try {
    res.render("meme", { meme: meme, user: user });
  } catch (error) {
    console.error(error);
    res.status(500).send("Internal Server Error");
  }
});


module.exports = router;

memes.egs 按钮:

<tbody>
            <% memes.forEach(meme=> { %>
              <tr class="meme-row <%= viewedMemeIds.includes(meme.id) ? 'viewed' : '' %>" data-meme-id="<%= meme.id %>">
                <td><img src="<%= meme.url %>" alt="<%= meme.name %>"></td>
                <td>
                  <%= meme.name %>
                </td>
                <% if (user) { %>
                  <td>
                    <button class="btn-meme details-button" onclick="handleDetailsClick(<%= JSON.stringify(meme) %>, <%= JSON.stringify(user) %>)">Details</button>
                  </td>
                  <% } %>
              </tr>
              <% }) %>
          </tbody>

MemeDetails.js:

async function handleDetailsClick(meme, user) {
  try {
    // Make a POST request to the meme route with the meme and user data
    const response = await fetch("/meme", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ meme, user }),
    });

    // Handle the response status
    if (!response.ok) {
      throw new Error("Network response was not ok");
    }

  } catch (error) {
    // Handle any errors
    console.error(error);
  }
}

终端中的响应是:POST /meme 200 10.677 ms - 2703,但页面上没有任何呈现。

P粉418854048P粉418854048376 天前528

全部回复(1)我来回复

  • P粉718730956

    P粉7187309562023-09-09 16:21:06

    首先我想提一下“但是页面上没有任何内容呈现”。

    它永远不会自动渲染页面,因为它在 MDN Webdocs 指出 fetch() 用于使用 AJAX 调用从网络获取资源。您获取的资源将存储在 response 变量中,您需要手动处理获取的数据(无论是操作 DOM insideText 还是重定向到另一个页面,例如使用 window.href.location< /代码>)

    但是,POST 请求通常用于在服务器上创建/修改数据(请阅读HTTP方法)。我看到您使用 POST 请求来渲染页面/导航到另一个页面。 GET 是 HTTP 方法,用于从服务器请求数据。

    我认为您最好更改处理handleDetailsClick的方式。您可以使用 或者简单地修改

  • 取消回复