问题描述
我使用 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);
});
一切正常,除了 COOKIES :(
当我发送 post 请求时,浏览器应该保存一个 cookie,但它没有保存,我不知道为什么。 这就是我使用 cookie 发送响应的方式 -
res
.status(200)
.cookie("singingGroupAVoted",true,{
maxAge: 432000 * 1000,sameSite: "none",secure: true,})
.send({
success: true,message: "Vote registered successfully",});
不知道浏览器没有保存 cookie。 我们将不胜感激任何类型的帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)