簡體   English   中英

React state 鈎子適用於開發,但不適用於構建(生產)

[英]React state hooks work on development but not on build (production)

我使用 MERN 開發了一個錯誤跟蹤器應用程序,並且在本地,當用戶使用反應掛鈎(狀態)和反應上下文執行 CRUD 操作時,界面會實時更新。

但是一旦我在google cloud上部署了我的應用程序,它似乎變成了一個static網站,如果我添加、編輯或刪除,我必須刷新頁面才能看到變化。

什么可能導致這種情況發生?

這是我的 server.js 代碼:

require("dotenv").config();
const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");
const ticketRoutes = express.Router();
const PORT = 8080;

var path = require("path");
let Ticket = require("./ticket.model");

app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

mongoose.connect(process.env.MONGO_DB, { useNewUrlParser: true, useUnifiedTopology: true }, (error) => {
  console.log(error);
});


const connection = mongoose.connection;

connection.once("open", function () {
  console.log("MongoDB database connection established successfully");
});

ticketRoutes.route("/").get(function (req, res) {
  Ticket.find(function (err, tickets) {
    if (err) {
      console.log(err);
    } else {
      res.json(tickets);
    }
  });
});

ticketRoutes.route("/:id").get(function (req, res) {
  let id = req.params.id;
  Ticket.findById(id, function (err, ticket) {
    res.json(ticket);
  });
});

ticketRoutes.route("/add").post(function (req, res) {
  let ticket = new Ticket(req.body);
  ticket
    .save()
    .then((ticket) => {
      res.status(200).json({ ticket });
    })
    .catch((err) => {
      res.status(400).send("adding new ticket failed");
    });
});

ticketRoutes.route("/delete/:id").delete(function (req, res) {
  Ticket.findByIdAndRemove(req.params.id, function (err, ticket) {
    if (err) {
      console.log(err);
      return res.status(500).send({ ticket });
    }
    return res.status(200).send({ ticket });
  });
});

ticketRoutes.route("/update/:id").post(function (req, res) {
  Ticket.findById(req.params.id, function (err, ticket) {
    if (!ticket) res.status(404).send("data is not found");
    else ticket.ticket_name = req.body.ticket_name;
    ticket.ticket_status = req.body.ticket_status;

    ticket
      .save()
      .then((ticket) => {
        res.json({ ticket });
      })
      .catch((err) => {
        res.status(400).send("Update not possible");
      });
  });
});

app.use("/tickets", ticketRoutes);
app.use(express.static(path.join(__dirname, "frontend/build")));
app.get("/*", (req, res) => {
  res.sendFile(path.join(__dirname, "frontend/build/index.html"));
});

app.listen(process.env.port || 8080, () => {
  console.log("Express app is running on port 8080");
});

該修復非常深入,但基本上我部署到谷歌雲的方法是一種僅適用於 static web 頁面的方法。 我最終使用這個偉大的指南使用 heroku 部署應用程序: 在此處輸入鏈接描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM