req.body пусто, и я не могу понять, почему - PullRequest
0 голосов
/ 09 мая 2019

Я новичок в выражениях и узлах, и я пытаюсь сделать сообщение с аксиосом на моем сервере, но req.body пусто, когда я console.log в узле.Кто-нибудь знает, что я делаю не так?Я вхожу в консоль и отправляю почтальону.

Вот server.js

const app = require('express')()
const bodyParser = require('body-parser');



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

app.get('/', (req, res) => {

  res.send('hello')
})

const port = 4444;

app.post('/send', (req, res) => {
      console.log('body: ', req.body)
      res.status(200).send(req.body)
});



app.listen(port, () => {
  console.log('We are live on port 4444');
});

Мой вызов axios

export default class Form extends Component {
     constructor(props) {
         super(props) 
         this.state = {
            name: 'kaleb',
            message: '',
            email: '',
            number: '',
            sent: false
         }




     }

     handleChange = (e) => {
        this.setState({
            [e.target.name]: e.target.value
        })

     }

     handleSubmit = () => {
         axios.post("/send", {name: this.state.name}).then(() => {
             console.log(this.state.name)
         })


     }

Ответы [ 4 ]

0 голосов
/ 09 мая 2019

Это обычно вызывается установкой расширения urlencoded на true, попробуйте следующее:

app.use(bodyParser.urlencoded({ extended: false }))
0 голосов
/ 09 мая 2019

Попробуйте ввести URL-адрес как http://localhost:4444/send в вашем вызове axios:

 handleSubmit = () => {
         axios.post("http://localhost:4444/send", {name: this.state.name}).then(() => {
             console.log(this.state.name)
         })
0 голосов
/ 09 мая 2019

Хорошо, вот что я думаю после прочтения всех вышеприведенных комментариев.

  1. Вы сказали, что когда вы отправляете запрос через почтальона, это console.log - пустой req.body. Так что нет проблем с вашим URL. Это идет к правильному маршрутизатору. Почтальон имеет 3 типа контента. Просто выберите «X-www-form-urlencoded» и отправьте запрос еще раз. Это должно работать.
  2. В вашем компоненте вы сказали, что ничего не происходит после отправки. Скорее всего, проблема должна быть с вашим URL. Ваш внутренний сервер работает на PORT 4444 и обычно реагирует на запуск приложения на PORT 3000. Поэтому, когда вы вызываете axios.post ('/ send'), он на самом деле отправляется на localhost:3000/server вместо localhost:4444/server. Теперь это не будет работать. Вам необходимо настроить прокси, чтобы избежать этой проблемы. Вот способ https://facebook.github.io/create-react-app/docs/proxying-api-requests-in-development. Или вы можете просто использовать axios.post('http://localhost:4444/server')

Примечание: , если вы используете axios.post('http://localhost:4444/server'), вы столкнетесь с проблемой cors. Используйте это, чтобы устранить эту проблему https://www.npmjs.com/package/cors

0 голосов
/ 09 мая 2019

попробуйте это В server.js:

    app.use(bodyParser.json());
    app.use(bodyParser.json({type: 'application/*+json'}));
    app.use(bodyParser.urlencoded({extended: false}));//or true whatever you need

Axios Call:

    axios({method:'post',url:'/send',data:{name:this.state.name}})
      .then(console.log(this.state.name));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...