Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk membuat halaman dalam nod express dari route.post?

Saya mempunyai halaman yang mendapat 100 meme daripada api. Ia memaparkan meme dalam jadual, dan setiap meme mempunyai butang butiran yang membawa pengguna ke halaman butiran meme. Saya perlu melakukan permintaan POST ke laluan meme dan memberikan halaman butiran meme. Permintaan siaran berjaya, tetapi halaman meme tidak dipaparkan daripada render() dalam router.post.

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;
butang

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

Tindak balas dalam terminal ialah: POST /meme 200 10.677 ms - 2703, tetapi tiada apa-apa yang dipaparkan pada halaman.

P粉418854048P粉418854048428 hari yang lalu608

membalas semua(1)saya akan balas

  • P粉718730956

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

    Mula-mula saya ingin menyebut "tetapi tiada apa yang dipaparkan pada halaman".

    Ia tidak akan memaparkan halaman secara automatik, seperti yang ditunjukkan dalam MDN Webdocs bahawa dalam fetch() 用于使用 AJAX 调用从网络获取资源。您获取的资源将存储在 response pembolehubah anda perlu mengendalikan data yang anda dapat secara manual (sama ada memanipulasi DOM insideText atau mengubah hala ke halaman lain, mis. menggunakan window. href.lokasi < /代码>)

    Walau bagaimanapun, permintaan POST biasanya digunakan untuk mencipta/mengubah suai data pada pelayan (sila baca Kaedah HTTP). Saya nampak anda menggunakan permintaan POST untuk memaparkan halaman/menavigasi ke halaman lain. GET ialah kaedah HTTP yang digunakan untuk meminta data daripada pelayan.

    Saya rasa anda lebih baik mengubah cara anda mengendalikan handleDetailsClick的方式。您可以使用 或者简单地修改

  • Batalbalas