Express - POST 和 PUT 上的 400 个错误请求

ltd*_*dev 6 javascript request node.js express postman

我需要一些帮助,因为我是 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);
}
Run Code Online (Sandbox Code Playgroud)

当我发出 PUT 或 POST 请求并在其中提供name(即验证应该通过)时,我会收到 400 错误。

在 POST 请求中,我在控制台中看到以下内容,它指的是我的星号 (*) 所在的位置

TypeError: Cannot read property '0' of undefined
    at /app/index.js:50:48
Run Code Online (Sandbox Code Playgroud)

根据 PUT 请求,我在控制台中看到以下内容Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

在这两种情况下,我在 validateCourse 函数中的 console.log 显示一个空对象{}

这是邮递员的截图 在此输入图像描述

有什么想法我做错了吗?

Tit*_*ula 4

\xe2\x80\x8d 我已经测试过这个code,我的意思是你可以尝试下面的代码

\n\n
app.post(\'/api/courses\', (request, response) => {\n  let { error } = validateCourse(request.body);\n\n  if (error) {\n      response.status(400).send(error.details[0].message); // *\n  }\n\n  let course = {\n      id: courses.length + 1,\n      name: request.body.name\n  };\n\n  // TODO save\n  console.log(\'TODO save the record\');\n\n  response.send(course);\n});\n\napp.put(\'/api/courses/:id\', (request, response) => {\n  let course = courses.find(c => c.id === parseInt(request.params.id));\n\n  if(!course) response.status(404).send(\'Oops!\');\n\n  let { error } = validateCourse(request.body);\n\n  if (error) {\n      response.status(400).send(error.details[0].message);\n  }\n\n  // TODO save\n  console.log(\'TODO save the record\');\n\n  response.send(course);\n});\n\n\nfunction validateCourse(course) {\n  let schema = Joi.object({\n      name: Joi.string().min(4).required()\n  });\n  console.log(course);\n  return schema.validate(course);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望它可以帮助你。

\n