Ошибка запроса POST: требуется путь `title` и` body` - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь отправить запрос POST на свой сервер, чтобы создать новый пост (заголовок, тело) и сохранить его в базе данных, и я получаю код состояния 200, однако заголовок и тело не вставляются в сообщение.

ОБНОВЛЕНИЕ: Я только что изменил return res.status(400).json({ error: errorHandler(err) }) в методе контроллера на res.send(err), и теперь я получаю четкое сообщение об ошибке: требуются пути заголовка и тела.

Как я могу решить эту проблему?

CreatePost. js

 class CreatePost extends React.Component {
     constructor(props) {
         super(props)
     
         this.state = {
              title: '',
              body: ''
         }
     }
     
     changeHandler = (e) => {
         this.setState({ [e.target.name]: e.target.value })
     }
     

     submitHandler = e => {
         e.preventDefault()
         axios.post(`${API}/blog/post/create`, this.state)
         .then(response => {
             console.log(response)
         }).catch(error => {
             console.log(error)
         })
     }
    render() {
        const {title, body} = this.state
        return (
            <div>
                <form onSubmit={this.submitHandler}>
                <input type="text" name="title" 
                onChange={this.changeHandler} value={title} />
                <input type="text" name="body"
                onChange={this.changeHandler} value={body}/>
                <button type="submit">Submit</button>
                </form>
            </div>
        )
    }
}

export default CreatePost

контроллеров / пост. js

exports.create = (req, res) => {
  let post = new Post()
  post.save((err, result) => {
    if(err) {
    return res.status(400).json({
        error: errorHandler(err)
    })
    }
    res.json(result)
    })
}

маршрутов / сообщений. js

router.post('/blog/post/create', create);

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Вы пытались вызвать свою конечную точку из Postman или Insomnia (мой любимый), чтобы убедиться, что она работает? Это отличный метод для тестирования ваших конечных точек независимо от вашего кода.

Поскольку вы не используете HTTP 404 в своем коде, я подозреваю, что это исходит от внутренних механизмов Express.

Кстати, глагол POST и часть 'create' в вашем API-интерфейсе uri заявляют об одном и том же намерении. Вы можете избавиться от этой части создания. Это считается одним из передовых методов .

0 голосов
/ 14 июля 2020

Я решил проблему. На самом деле я не вставлял заголовок и текст в объект сообщения.

Я добавил const {title, body} = req.body и вставил данные в объект let post = new Post({title, body}).

контроллеры / сообщения. js

exports.create = (req, res) => {
  const {title, body} = req.body
  let post = new Post({title, body})

  post.save()
  .then(response => {
  res.send(response)
    .catch(err => {
      res.send(err)
})
})
}
0 голосов
/ 14 июля 2020

Попробуйте с этим.

axios({ url: `${API}/blog/post/create`, method: 'POST', data: this.state})
...