ОБНОВЛЕНО: Express.js req.body - пустой объект, а req.body.name не определено

Я не уверен, что я здесь делаю не так, но я ничего не получаю от req.body или req.body.name. Я просто пытаюсь получить текст из поля ввода в компоненте React. Вот мой запрос POST:

    //posting notes to backend and storing in db
module.exports = (app,bodyparser,mongoUrl) => {


    let MongoDB = require('mongodb').MongoClient;
    app.use(bodyparser.urlencoded({extended: false}));
    app.use(bodyparser.json());

    app.post('/notes',function(req,res){
        //posting the note just fine, just not receiving the note text (says undefined)
        //not getting note text for some reason?? only returning the date...

        //send response to append note to page
        //store note data in db

        let noteData = {
            text: req.body.name,
            date: new Date().toDateString()
        };
        console.info(req.body);
        MongoDB.connect(mongoUrl,function(err,db){

                let notesCollection = db.collection('notes');
                notesCollection.insert(noteData);
                db.close();
        });

        res.status(201).send(noteData);

    });

}

И мой компонент React:

class NewNote extends Component {
//this is for creating a new note only
//need post request for this one
//need to clear textarea upon submit or cancel
    render(){
      return (
        <div id = "form-container" className='container-fluid' style = {defaultStyle}>
          <div id = "form">
            <div className = "form-group">
            <form action = "/notes" method = "POST" encType = "multipart/form-data">
              <label htmlFor = "newNote">New Note:</label>
                <input type = "text" name = "name" className = "form-control" rows = "5" id = "newNote" placeholder = "Write your note here..."></input>
                <button id = "done" type = "submit" className = "btn btn-primary pull-right">Done</button>
                <button id = "cancel" className = "btn btn-warning pull-right">Cancel</button>
            </form>
            </div>
          </div>
        </div>
      )
    }

}

И мой файл package.json:

{
  "name": "quick-notes-app",
  "version": "1.0.0",
  "description": "my first full-stack javascript app",
  "main": "./routes/server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon --exec babel-node ./routes/server.js --ignore public/",
    "dev": "webpack -wd",
    "lint": "eslint ./"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/CandiW/quick-notes-app.git"
  },
  "author": "CandiW",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/CandiW/quick-notes-app/issues"
  },
  "homepage": "https://github.com/CandiW/quick-notes-app#readme",
  "dependencies": {
    "body-parser": "^1.18.2",
    "express": "^4.16.3",
    "mongodb": "^2.2.35",
    "randomcolor": "^0.5.3",
    "react": "^16.3.2",
    "react-dom": "^16.3.2"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.3",
    "babel-eslint": "^8.2.3",
    "babel-loader": "^7.1.4",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "eslint": "^4.19.1",
    "eslint-plugin-react": "^7.7.0",
    "nodemon": "^1.17.3",
    "webpack": "^3.11.0"
  }
}

Это мой файл server.js, в котором мне нужен модуль body-parser:

const express = require('express');
const path = require('path');
const bodyparser = require('body-parser');
const notes = require('./notes.js');
const myNotes = require('./mynotes.js');
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;

let app = express();
let database = "mongodb://localhost:3000/";

    app.use(express.static('public'));
    app.use(bodyparser.urlencoded({extended: true}));
    app.use(bodyparser.json());

function quickNotesApp(port){
    // eslint-disable-next-line no-console
    console.info("listening on port " + port);

    notes(app,bodyparser,database);
    myNotes(app,bodyparser,database);

    app.listen(port);

}

quickNotesApp(3000);

Прошу прощения за мои комментарии в коде :) Я использую их, чтобы отслеживать свои дела и то, что делает каждый компонент. Вы все можете увидеть мое репозиторий на github для моего приложения здесь: Приложение Quick-Notes

Обновление 02.05.2018:

Я внес некоторые изменения в то, как я использую body-parser, и как я его использую в своем запросе POST (я обновил исходные образцы кода, которые я приложил). На данный момент я все еще получаю тот же text: null, когда я возвращаю массив документов из моей базы данных, и когда я console.info req.body, это все еще пустой объект. Хотите знать, есть ли у кого-нибудь мысли о том, является ли проблема с React.js? Например, мы должны использовать className вместо class в наших компонентах React. Я не могу найти ничего, чтобы ответить на этот вопрос. Я также удалил и переустановил express, body-parser и все остальные мои зависимости безрезультатно.

Обновление 2 - 02.05.2018

Для тех, кто может найти это полезным, я нашел эта средняя статья о том, как объединить серверную часть Node.js с интерфейсом React.js. Думаю, я собираюсь попробовать это и посмотреть, поможет ли это.

Не могли бы вы поделиться своим package.json

shivlal kumavat 01.05.2018 15:28

Конечно - я отредактирую сообщение здесь через секунду

Candis W 01.05.2018 15:35

Не могли бы вы поделиться также index.js серверным кодом.

shivlal kumavat 01.05.2018 15:37

Он там сейчас!

Candis W 01.05.2018 15:39

вам нужно добавить app.use(bodyParser.json());, как показано ниже.

shivlal kumavat 01.05.2018 15:42

если не работает, дайте мне знать, спасибо.

shivlal kumavat 01.05.2018 15:43

Спасибо! Пойду попробую :)

Candis W 01.05.2018 15:47

Я дал ответ. ниже с вашим полным index.js

shivlal kumavat 01.05.2018 15:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
1 052
2

Ответы 2

npm i --save body-parser
const body_parser = require('body-parser');
app.use(body_parser.json());
app.use(body_parser.urlencoded({extended: true}));

Будет лучше, если вы добавите объяснение, почему ваш код работает.

Spoody 01.05.2018 17:45

Я использовал машинописный текст и рассматривал возможность импорта bodyParser вот так, и это сработало

gpbaculio 01.04.2019 17:03

Добавьте это также app.use(bodyParser.json());

const express = require('express');
const path = require('path');
const notes = require('./notes.js');
const myNotes = require('./mynotes.js');
const bodyparser = require('body-parser');
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;

let app = express();
let database = "mongodb://localhost:3000/";
app.use(bodyparser.urlencoded({extended: true}));
app.use(bodyparser.json());

function quickNotesApp(port){
    // eslint-disable-next-line no-console
    console.info("listening on port " + port);
    app.use(express.static('public'));


    notes(app,database);
    myNotes(app,database);

    app.listen(port);

}

quickNotesApp(3000);

Хорошо, это не сработало .... Вот как это выглядит в базе данных: {"_id":"5ae872c5347b9e23901bf419","text":null,"date":"Tue May 01 2018"} Как видите, text - это null.

Candis W 01.05.2018 16:06

Я внес некоторые изменения и отредактировал свой исходный вопрос, чтобы отразить эти обновления. Короче все равно получаю тот же "text": null.

Candis W 02.05.2018 17:48

Другие вопросы по теме