【问题标题】:React state hooks work on development but not on build (production)React 状态挂钩适用于开发,但不适用于构建(生产)
【发布时间】:2020-08-16 14:23:49
【问题描述】:

我使用 MERN 开发了一个错误跟踪器应用程序,在本地,当用户使用反应钩子(状态)和反应上下文执行 CRUD 操作时,界面会实时更新。

但是一旦我将我的应用部署到谷歌云上,它似乎变成了一个静态网站,如果我添加、编辑或删除,我必须刷新页面才能看到变化。

什么可能导致这种情况发生?

这是我的 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");
});

【问题讨论】:

  • 我们需要更多信息:这台服务器是如何部署的以及在哪里部署的? React 应用程序是如何部署的?您有如何访问应用程序的示例吗? react 应用程序如何与该服务器通信?浏览器控制台日志中是否有任何错误?

标签: node.js reactjs mongodb express google-cloud-platform


【解决方案1】:

修复非常深入,但基本上我部署到谷歌云的方法是一种仅适用于静态网页的方法。我最终使用这个很棒的指南使用 heroku 部署了应用程序:enter link description here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多