我一直在尝试从我的React-app向我的Express服务器发出一个发布请求,该请求将订单保存在会话中,但是会话未保存我要添加到其中的元素。我的目标是,每次客户提交他的订单时,快速会话都会保存它,并且当已经有另一个订单待处理时,它不会让客户提交另一个订单。
这是会话设置:
import React, { useState } from "react";
const UserDetails = ({ navigation }) => {
// Here i make a state
const [selecthostingOption, setselecthostingOption] = useState([]);
const hostingChange = e => {
e.preventDefault();
console.log(e.target.value);
setselecthostingOption(e.target.value);
};
return (
<>
<button onClick={hostingChange} name="selecthostingOption" value="1">
Value 1
</button>
<button onClick={hostingChange} name="selecthostingOption" value="2">
Value 2
</button>
</>
);
};
export default UserDetails;
如您所见,这是用于快速会话的简单设置。
这是路由器请求处理程序:
app.set("trust proxy", 1); // trust first proxy
app.use(
session({
secret: secret,
cookie: {
maxAge: 7200000,
secure: false,
saveUninitialized: true,
resave: true
}
})
);
如您所见,客户端是否提交了订单并且router.post("/neworder", (req, res) => {
console.log(req.session);
if (!req.session.order) {
console.log("Order not made yet.");
let order_Track = uuid();
let time_Purchased = moment(Date.now()).format("MMMM Do YYYY, h:mm:ss a");
//SQL Query
let q = `INSERT INTO orders ( Order_Track ,time_created, LastName, FirstName, Adress, Amount, Toppings)
VALUES ('${order_Track}' ,'${time_Purchased}' , '${req.body.lastName}','${req.body.firstName}', '${req.body.adress}', '${req.body.amount}', "${req.body.firstTopping}, ${req.body.secondTopping}" );
`;
connection.query(q, function(error, results, fields) {
if (error) throw error;
});
req.session.order = { orderTrack: order_Track, time_Purchased };
req.session.save();
res.status(200).send({ order_Track, time_Purchased });
} else {
console.log("Order placed already");
res.status(401).send({ msg: "Order is already placed." });
}
});
不存在,会话将向其自身添加“ order”元素,因此客户端下次尝试提交服务器状态将为401,并且将发送的消息是“已下订单”。
我尝试使用req.session.order
,并且还尝试将请求发送到主索引和路由器。仍然无法正常工作。在重定向页面后,会话被删除了。
我想念什么?也许是Cors?