【问题标题】:req.body is undefined in express.js application (paths are correct, body parser is used, body has keys and values) but req.body is undefinedreq.body 在 express.js 应用程序中未定义(路径正确,使用正文解析器,正文具有键和值)但 req.body 未定义
【发布时间】:2020-04-20 22:01:54
【问题描述】:

Express 应用程序没有获取通过 React 应用程序发送的主体,它打印 undefined 但是路径在反应和节点 js 方法中都是正确的,使用 body-parser,主体在反应 js 中有键和值 方法。我找不到问题。

客户端方法。试图调用服务器中定义的 post 方法。

 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

【问题讨论】:

  • 如果您使用 Postmon 发送请求,请确保在 Body 中选择 JSON。默认的Text 不起作用,会报这个错误。

标签: node.js reactjs express axios body-parser


【解决方案1】:

在前端部分试试这个:axios.post('/api/auth/create',{userData},

【讨论】:

    【解决方案2】:

    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");
    });
    

    【讨论】:

      【解决方案3】:

      我在后台修改了代码

          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);
            });
        };```
      

      【讨论】:

        猜你喜欢
        • 2018-08-19
        • 2012-02-28
        • 2014-03-20
        • 1970-01-01
        • 2012-07-03
        相关资源
        最近更新 更多