req.body не определено в приложении express. js (пути верны, используется анализатор тела, тело имеет ключи и значения), но req.body не определено - PullRequest
0 голосов
/ 21 апреля 2020

Express приложение не получает тело, которое отправляет через приложение реагировать, оно печатает неопределенное, но пути правильны как в реакциях, так и в методах node js, используется body-parser, тело имеет ключи и значения в реакции js метод. Я не смог найти проблему.

Клиентский метод . Попытка вызвать метод записи, определенный на сервере.

 const handleSignUp = () => {
      //  dispatch(setLoadingState("loading"));
        const userData = {
          firstName: firstName,
          lastName: lastName,
          email: email,
          password:password
        }
        var headers = { 'Content-Type': 'application/json' }
        axios.post('/api/auth/create',userData, {
          headers :{ 'Content-Type': 'application/json' }})
        .then(function (response) {    
              console.log(response);

Метод сервера

 const express = require("express");
    const { MongoClient, ObjectID } = require("mongodb");
    const app = express();
    const cors = require("cors");
    const cookieParser = require("cookie-parser");
    const bodyParser = require('body-parser');
    const axios=require('axios');
    const port = 3001;


    // Connection URL

    app.use(cors());
    app.use(express.json());
    app.use(cookieParser());

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));

    const url = 'mongodb://localhost:27017';

    // Database Name
    const dbName = 'sample';

    // Create a new MongoClient
    const client = new MongoClient(url);

    // Use connect method to connect to the Server



    client.connect(err => {
      if (err) {
        console.log(err);
        process.exit(1);
      } 

    console.log("Connected successfully to server");

    const db = client.db(dbName);


    app.post("/api/auth/create", (req, res) => {
      console.log("AuthService server", req.body.userData);
      db.collection("users").insertOne({
        firstName: req.body.userData.firstName,
        lastName: req.body.userData.lastName,
        email: req.body.userData.email,
        password: req.body.userData.password
      });

      res.send("You are a registered user now");
    });



    app.listen(port, () => console.log(`Example app listening on port ${port}!`));
    });```




  I can see in log in auth Service method that body is undefined.


    log :AuthService server undefined
    Error :TypeError: Cannot read property 'firstName' of undefined

Ответы [ 3 ]

0 голосов
/ 21 апреля 2020

попробуйте это во внешней части: axios.post('/api/auth/create',{userData},

0 голосов
/ 22 апреля 2020

Я изменил код в бэкэнде

    console.log("AuthService server", req.body.userData);
    const { userName, email, password } = req.body.userData;
 db.collection("Users").insertOne({
            userName,
            email,
            password,
          });
}```

and in the frontend 

```const handleSignUp = () => {
    //  dispatch(setLoadingState("loading"));
    const userData = {
      userName,
      email,
      password,
    };

    axios
      .post("/api/auth/create", { userData })
      .then(function (response) {
        dispatch(setLoadingState("init"));

        if (response.data === "OK") {
          setResponseMessage(true);
          setIsErrorMessage(false);
        } else {
          setResponseMessage(false);

          setIsErrorMessage(true);
        }
      })
      .catch(function (error) {
        console.log(error);
      });
  };```
0 голосов
/ 21 апреля 2020

req.body.userData не существует, поэтому он не определен, попробуйте вместо этого:

app.post("/api/auth/create", (req, res) => {
  db.collection("users").insertOne({
    firstName: req.body.firstName,
    lastName: req.body.lastName,
    email: req.body.email,
    password: req.body.password
  });
  res.send("You are a registered user now");
});
...