0

我用 node express 构建了一个 API,并将其部署在 Heroku 上。然后我用 reactJS 构建客户端并将其部署在 Netlify 上。我使用了 cors 包来避免 cors 错误。这是我的服务器文件(后端入口点) -

const express = require("express");
const app = express();
const requestIP = require("request-ip");
const requestCountry = require("request-country");
const mongoose = require("mongoose");
require("dotenv").config();
const bodyParser = require("body-parser");
const cors = require("cors");
const cookieParser = require("cookie-parser");

const singingGroupA = require("./routes/api/singing/groupA");
const singingGroupB = require("./routes/api/singing/groupB");
const mehandiGroupA = require("./routes/api/mehandi/groupA");
const mehandiGroupB = require("./routes/api/mehandi/groupB");
const post = require("./routes/api/post");
const contact = require("./routes/api/contact");

const PORT = process.env.PORT || 5000;
const DB_URL = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@bsp-competitions.n2yb5.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority`;

// connect database
mongoose
  .connect(DB_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useFindAndModify: false,
  })
  .then(() => {
    console.log("database connected");
  })
  .catch((err) => console.log(err));

var allowedDomains = [
  "http://localhost:3000",
  "https://www.freedemy.in",
  "https://freedemy.in",
  "http://127.0.0.1:3000",
  "https://dance-and-mehandi-bsp.herokuapp.com",
];
app.use(
  cors({
    origin: function (origin, callback) {
      // bypass the requests with no origin (like curl requests, mobile apps, etc )
      if (!origin) return callback(null, true);

      if (allowedDomains.indexOf(origin) === -1) {
        var msg = `This site ${origin} does not have an access. Only specific domains are allowed to access it.`;
        return callback(new Error(msg), false);
      }
      return callback(null, true);
    },
    credentials: true,
    methods: ["GET", "POST", "PUT", "OPTIONS"],
  })
);

app.use(bodyParser.urlencoded({ extended: false })); // parse application/x-www-form-urlencoded
app.use(bodyParser.json()); // parse application/json

app.use(cookieParser());

app.use(requestIP.mw());

app.use(
  requestCountry.middleware({
    attributeName: "requestCountryCode", // default is 'requestCountryCode'
    privateIpCountry: "IN", // Result for private network IPs
  })
);

// route middlewares
app.use("/api/post", post);
app.use("/api/contact", contact);
app.use("/api/singing/group-a", singingGroupA);
app.use("/api/singing/group-b", singingGroupB);
app.use("/api/mehandi/group-a", mehandiGroupA);
app.use("/api/mehandi/group-b", mehandiGroupB);

if (process.env.NODE_ENV == "production") {
  app.use(express.static("client/build"));

  const path = require("path");

  app.get("/*", (req, res) => {
    res.sendFile(path.join("/", "app", "client", "build", "index.html"));
  });
}

app.listen(PORT, () => {
  console.log("server is running on port : ", PORT);
});

一切正常,除了饼干 :(

这是响应标头。可以看到没有问题 在此处输入图像描述

当我发送一个 post 请求时,浏览器应该保存一个 cookie,但它没有保存,我不知道为什么。这就是我使用 cookie 发送响应的方式 -

res
      .status(200)
      .cookie("singingGroupAVoted", true, {
        maxAge: 432000 * 1000,
        sameSite: "none",
        secure: true,
      })
      .send({
        success: true,
        message: "vote registered successfully",
      });

不知道浏览器没有保存cookie。我们将不胜感激任何类型的帮助

4

0 回答 0