axios 为什么在postman上发出的请求给予了想要的响应,而在浏览器上发出的请求却失败了?

nhjlsmyf  于 2023-05-12  发布在  iOS
关注(0)|答案(1)|浏览(235)

所以我正在做一个洗衣预订项目,我正在使用node js和express js,我已经能够从其他API端点检索数据,但这一个不起作用,我想使用express-sessions实现数据持久化,所以当用户移动到下一个页面时,从前者检索细节,我发布数据并将其存储在会话中,我还创建了一个唯一ID,然后将其发送回客户端,并将其作为查询参数添加到URL中,然后使用get请求从服务器检索它,这就是它失败的地方。

route.post("/step1", async (req, res) => {
    const bookingData = req.body;

    const bookingId = generateBookingId();
    console.log(bookingId)

    req.session.bookings = req.session.bookings ? req.session.bookings : {};
    req.session.bookings[bookingId] = bookingData;

    if(req.session.bookings){
        console.log(req.session.bookings);
    }

    res.send(bookingId);
})

这是将bookingId发送回用户的代码,可以正常工作。
发布后,这是我使用react-router-dom的useNavigate移动到新页面的代码

const { mutate: bookingMutate, data } = useMutation(addBookings);
    if(data?.data){
        navigate(`/services/${serviceId}/step2?bookingId=${data?.data}`);
    }

根据我从失败的请求中看到的情况,数据从useQuery包的useMutation钩子中成功地拉取
现在在页面中显示这些数据我有const query = new URLSearchParams(useLocation().search); const bookingId = query.get('bookingId');

function getSessionData(bookingId) {
    return axios.get(`http://localhost:9000/api/bookings/step2?bookingId=${bookingId}`);
}

const { data } = useQuery("sessionData", getSessionData(bookingId));
console.log(data?.data)

以及处理此请求的Node js代码

route.get("/step2", async (req, res) => {
    try {
      const { bookingId } = req.query;
      const bookingData = req.session.bookings?.[bookingId];
  
      if (!bookingData) {
        return res.status(404).send("The session data does not exist");
      }
    
      res.send(bookingData);
    } catch (error) {
      console.error("Error retrieving booking data:", error);
      res.status(500).send("An error occurred while retrieving booking data");
    }
});

然后,当我发出一个请求,虽然我已经调试和记录了几个细节,我确认它确实被存储在会话中,我使用 Postman 和一切工作正常,但这个特定的一个只是失败,并返回404错误说“会话数据不存在”,但一个在 Postman 工作正常,我还使用了cors包来确保我可以从api和其他get请求中获取数据,只是这一个失败了

qij5mzcb

qij5mzcb1#

你需要返回json对象

route.get("/step2", async (req, res) => {
try {
  const { bookingId } = req.query;
  const bookingData = req.session.bookings?.[bookingId];

  if (!bookingData) {
    return res.status(404).json("The session data does not exist");
  }

  res.json(bookingData);
} catch (error) {
  console.error("Error retrieving booking data:", error);
  res.status(500).json("An error occurred while retrieving booking data");
}

});

route.post("/step1", async (req, res) => {
const bookingData = req.body;

const bookingId = generateBookingId();
console.log(bookingId)

req.session.bookings = req.session.bookings ? req.session.bookings : {};
req.session.bookings[bookingId] = bookingData;

if(req.session.bookings){
    console.log(req.session.bookings);
}

res.json(bookingId);

})

相关问题