recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment rendre une page dans node express à partir de route.post ?

J'ai une page qui récupère 100 mèmes à partir d'une API. Il affiche les mèmes dans un tableau et chaque mème possède un bouton de détails qui amène l'utilisateur à la page de détails du mème. Je dois effectuer une requête POST sur la route du mème et afficher la page de détails du mème. La demande de publication réussit, mais la page mème n'est pas rendue depuis render() dans 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;
Bouton

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

La réponse dans le terminal est : POST /meme 200 10,677 ms - 2703, mais rien n'est rendu sur la page.

P粉418854048P粉418854048441 Il y a quelques jours619

répondre à tous(1)je répondrai

  • P粉718730956

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

    Je tiens d’abord à mentionner « mais rien n’est rendu sur la page ».

    Il ne rendra jamais automatiquement la page, comme il est souligné dans MDN Webdocs que dans fetch() 用于使用 AJAX 调用从网络获取资源。您获取的资源将存储在 response variables, vous devez gérer manuellement les données que vous obtenez (soit en manipulant le DOM à l'intérieur du texte, soit en redirigeant vers une autre page, par exemple en utilisant window.href .emplacement < /代码>)

    Cependant, les requêtes POST sont généralement utilisées pour créer/modifier des données sur le serveur (veuillez lire Méthodes HTTP). Je vois que vous utilisez la requête POST pour afficher la page/accéder à une autre page. GET est la méthode HTTP utilisée pour demander des données au serveur.

    Je pense que vous feriez mieux de changer la façon dont vous gérez handleDetailsClick的方式。您可以使用 或者简单地修改

  • Annulerrépondre