Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在React-Redux Saga Express Nodejs环境中,路由器中未定义req.body_Node.js_Express_React Redux_Redux Saga_Body Parser - Fatal编程技术网

Node.js 在React-Redux Saga Express Nodejs环境中,路由器中未定义req.body

Node.js 在React-Redux Saga Express Nodejs环境中,路由器中未定义req.body,node.js,express,react-redux,redux-saga,body-parser,Node.js,Express,React Redux,Redux Saga,Body Parser,我已经阅读了在StackOverflow上req.body返回undefined的其他示例,但还没有遇到任何解决我的问题的解决方案 我在React Express Node.js环境中工作。我有其他正在工作的对服务器的GET请求,但是当我从路由器注销“req.body”时,有一个GET请求返回“undefined” 我的Express服务器的配置如下: const express = require("express"); require("dotenv").config(); const a

我已经阅读了在StackOverflow上req.body返回undefined的其他示例,但还没有遇到任何解决我的问题的解决方案

我在React Express Node.js环境中工作。我有其他正在工作的对服务器的GET请求,但是当我从路由器注销“req.body”时,有一个GET请求返回“undefined”

我的Express服务器的配置如下:

const express = require("express");
require("dotenv").config();

const app = express();
const bodyParser = require("body-parser");
const sessionMiddleware = require("./modules/session-middleware");

const passport = require("./strategies/user.strategy");

// Body parser middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// Route includes
const userRouter = require("./routes/user.router");
const bucketRouter = require("./routes/bucket.router");
const UploaderS3Router = require("react-dropzone-s3-uploader/s3router");
const imageRouter = require("./routes/image.router");

// Passport Session Configuration //
app.use(sessionMiddleware);

// start up passport sessions
app.use(passport.initialize());
app.use(passport.session());

/* Routes */
app.use("/api/user", userRouter);
app.use("/api/user", bucketRouter);
app.use("/api/imageurl", imageRouter);

//aws route
app.use(
  "/s3",
  UploaderS3Router({
    bucket: "annesbucket", // required
    region: "us-east-2", // optional
    headers: { "Access-Control-Allow-Origin": "*" }, // optional
    ACL: "public-read", // this is the default - set to `public-read` to let anyone view uploads
  })
);

// Serve static files
app.use(express.static("build"));

// App Set //
const PORT = process.env.PORT || 5000;

/** Listen * */
app.listen(PORT, () => {
  console.log(`Listening on port: ${PORT}`);
});
我使用redux saga发出GET请求,并将有效负载从req.body传递到服务器,如下所示:

import axios from "axios";
import { put, takeLatest } from "redux-saga/effects";

function* getPhotosExperiences(action) {
  try {
    const userID = action.payload.userID;

    const config = {
      headers: { "Content-Type": "application/json" },
      withCredentials: true,
    };
    const response = yield axios.get(
      `/api/imageurl/photoexperience/${userID}`,
      action.payload
      //   config
    );
    console.log(action.payload);
    yield put({
      type: "SET_PHOTOS_EXPERIENCES",
      payload: response.data,
    });
    console.log(response.data);
  } catch (err) {
    console.log("error getting list items:", err);
  }
}

function* getPhotosExperiencesSaga() {
  yield takeLatest("GET_PHOTOS_EXPERIENCES", getPhotosExperiences);
  console.log("getPhotosExperiences fired off");
}

export default getPhotosExperiencesSaga;
同样,当我在我的传奇中注销“action.payload”时,我看到了我想要传递给服务器的数据

未识别req.body的GET请求位于服务器中注册为imageRouter的路由器中

这是我的GET请求:

router.get("/photoexperience/:userID", rejectUnauthenticated, (req, res) => {
  console.log(
    "this is what the server is getting:",
    req.body.userID,
    req.body.experienceID
  );
  console.log("req.params.id is:", req.params.id);
  console.log("this is req:", req);
  const experienceID = req.body.experienceID;
  const queryText = `SELECT "user_photos_experiences".experience_id, "user_photos_experiences".photo_id, "photos".experience_photo
  FROM "user_photos_experiences"
   JOIN "photos" ON "user_photos_experiences".photo_id = "photos".id WHERE "user_photos_experiences".experience_id = $1`;
  pool
    .query(queryText, [experienceID])
    .then((responseDB) => {
      const dbRows = responseDB.rows;
      console.table(dbRows);
      res.send(dbRows);
    })
    .catch((err) => {
      console.log("error getting photos from photoexperience:", err);
      res.sendStatus(500);
    });
}); 
我希望你能多看一眼这件事——它已经困扰了我好几个小时了


TLDR;我想知道如何从服务器端路由器中访问我从我的传奇中发送的有效负载。

我找到了解决此问题的方法,以防其他人使用PostgreSQL遇到类似问题。我需要将我的经验存储在req.query上,而不是存储在req.body上,即:

router.get("/photoexperience/:userID", rejectUnauthenticated, (req, res) => {
  console.log(
    "this is what the server is getting:",
    req.query.userID,
    req.query.experienceID
  );
  console.log(req.query);
  // res.header("Access-Control-Allow-Origin", "*");
  const userID = req.query.userID;
  const queryText = `SELECT "user_photos_experiences".experience_id, "user_photos_experiences".photo_id, "photos".experience_photo, "user_photos_experiences".user_id
  FROM "user_photos_experiences"
   JOIN "photos" ON "user_photos_experiences".photo_id = "photos".id WHERE "user_photos_experiences".user_id = $1;`;
  pool
    .query(queryText, [userID])
    .then((responseDB) => {
      const dbRows = responseDB.rows;
      console.table(dbRows);
      res.send(dbRows);
    })
    .catch((err) => {
      console.log("error getting photos from photoexperience:", err);
      res.sendStatus(500);
    });
});
此修复了我的GET请求:)有关req.body和req.query之间差异的信息已在此处得到回答: