我用 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。我们将不胜感激任何类型的帮助
