Express - 400 плохих запросов на POST и PUT - PullRequest
0 голосов
/ 23 января 2020

Мне нужна помощь, поскольку я новичок в Node.js и express. У меня есть следующий код, который я тестирую на Postman

const Joi = require('@hapi/joi');
const bodyParser = require('body-parser');

// Load the express framework
const express = require('express');
const app = express();

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

// temp array
const courses = [
    {id: 1, title: 'Learning Node.js'},
    {id: 2, title: 'How to become a full stack dev'},
    {id: 3, title: 'Master your Javascript skills'}
];
app.post('/api/courses', (request, response) => {
    let error = validateCourse(request.body);
    if (error) {
        response.status(400).send(error.details[0].message); // *
        return;
    }

    let course = {
        id: courses.length + 1,
        name: request.body.name
    };

    // TODO save
    console.log('TODO save the record');

    response.send(course);
});

app.put('/api/courses/:id', (request, response) => {
    let course = courses.find(c => c.id === parseInt(request.params.id));
    if(!course) response.status(404).send('Oops!');

    let { error } = validateCourse(request.body);
    if (error) {
        response.status(400).send(error.details[0].message);
        return;
    }

    // TODO save
    console.log('TODO save the record');

    response.send(course);
});


function validateCourse(course) {
    let schema = Joi.object({
        name: Joi.string().min(4).required()
    });
    console.log(course);
    return schema.validate(course);
}

Либо, когда я делаю запрос PUT или POST, в котором я предоставляю name (то есть проверка должна пройти), я получаю 400 ошибка.

По запросу POST я вижу в консоли следующее, где указано, где моя звездочка (*)

TypeError: Cannot read property '0' of undefined
    at /app/index.js:50:48

По запросу PUT в консоли я вижу следующее Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

В обоих случаях у console.log, который у меня есть в функции validateCourse, отображается пустой объект {}

Это скриншот от почтальона enter image description here

Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 23 января 2020

?‍? Я проверял это code, и я имею в виду , вы можете попробовать этот код ниже ?:

app.post('/api/courses', (request, response) => {
  let { error } = validateCourse(request.body);

  if (error) {
      response.status(400).send(error.details[0].message); // *
  }

  let course = {
      id: courses.length + 1,
      name: request.body.name
  };

  // TODO save
  console.log('TODO save the record');

  response.send(course);
});

app.put('/api/courses/:id', (request, response) => {
  let course = courses.find(c => c.id === parseInt(request.params.id));

  if(!course) response.status(404).send('Oops!');

  let { error } = validateCourse(request.body);

  if (error) {
      response.status(400).send(error.details[0].message);
  }

  // TODO save
  console.log('TODO save the record');

  response.send(course);
});


function validateCourse(course) {
  let schema = Joi.object({
      name: Joi.string().min(4).required()
  });
  console.log(course);
  return schema.validate(course);
}

Надеюсь, это поможет вам ?.

0 голосов
/ 23 января 2020
let course = courses.find(c => c.id === parseInt(request.params.id))
if(!course) return response.status(404).send('Oops!');

let { error } = validateCourse(request.body);
if (error) {
    return response.status(400).send(error.details[0].message);
}

response.send(course);

Это должно устранить ошибку, которую вы получаете по запросу PUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...