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

2024-02-02

我需要一些帮助,因为我是 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

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

This is a screenshot from postman enter image description here

有什么想法我做错了吗?


????‍????我已经测试过了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);
}

希望可以帮到你????。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Express - POST 和 PUT 上的 400 个错误请求 的相关文章

随机推荐

  • 如何在调试时将 Visual Studio 异常消息语言更改为英语[重复]

    这个问题在这里已经有答案了 我正在安装 XP 荷兰语版本的机器上工作 Visual Studio 2005 以英文安装 我在调试时遇到了一个恼人的问题 所有 NET Framework 异常消息都以荷兰语显示 这使得它们真的毫无价值 我尝试
  • n阶贝塞尔曲线?

    我已经成功地实现了二次和三次贝塞尔曲线 它们非常简单 因为我们有一个公式 现在我想使用泛化来表示 n 阶贝塞尔曲线 Where and 我使用位图库来渲染输出 所以这是我的代码 binomialCoef n k factorial n fa
  • Google 地图半径到缩放级别

    我有一张地图 上面有一个自定义 UIView 我正在根据缩放级别计算圆的半径 func getCenterCoordinate gt CLLocationCoordinate2D let centerPoint self mapView c
  • char[] 到 uint64_t

    我正在尝试转换数组char into a uint64 t但它不起作用 这是我的代码 char input 8 Initialisation of input int i j uint64 t paquet 0 for i 0 i lt 8
  • 以非特定于编译器的方式更改 Fortran 中的目录

    我希望更改 Fortran 90 代码中的工作目录 是否可以以非特定于编译器的方式执行此操作 这是我的代码 program change directory integer ierr call system mkdir p myfolder
  • Json.net 序列化/反序列化派生类型?

    json net newtonsoft 我正在查看文档 但找不到任何相关内容或最佳方法 public class Base public string Name public class Derived Base public string
  • Tweepy API 搜索没有关键字

    我正在使用 Tweepy python 的 REST API 客户端 并且尝试通过几个关键字查找推文 并且推文中不包含 url 但搜索结果并不令我们满意 看起来查询有错误并被停止 此外 我们还观察到结果是逐一返回的 而不是 像以前那样 以
  • 无法使用 Visual Studio 2015 Pro 构建 boost 1.60

    平台是Windows Server 2012R2 安装的工具集是 VS2015 with update 1 和 Windows Driver Kit 10 我运行 VS2015 x64 Native Tools Command Prompt
  • 使用 css 'column-count' 时 YouTube 嵌入的错误

    我在网页中插入了 YouTube 嵌入代码 iframe 代码 并使用 css 列计数自动将页面中的文本分为两列 newspaper moz column count 2 Firefox webkit column count 2 Safa
  • 将 PCM 波形数据转换为 numpy 数组,反之亦然

    情况 我正在使用 WebRTC 中的 VAD 语音活动检测 WebRTC VAD https github com wiseman py webrtcvad Python 适配器 这示例实现 https github com wiseman
  • Python OpenCV putText() 显示(非ascii、unicode、utf)字符符号

    我正在创建亚美尼亚语手语检测应用程序 但是 当我签名时 亚美尼亚字母不会显示 但会显示在我的控制台 终端中 我的代码无法正常工作 我做错了什么 让我知道如何更改或实施以在屏幕上显示该字母 当前任何非 ascii 字符都显示为 或框而不是像这
  • C++ 终止进程函数

    我一直在寻找 Win32 API C 函数的示例终止进程 http msdn microsoft com en us library ms686714 28VS 85 29 aspx但找不到任何 我一般对 Win32 API 不太熟悉 所以
  • 使用7zip sdk压缩文件,但压缩文件不是原来的文件,无法使用unrar解压

    我正在使用 7zip sdk http www 7 zip org sdk html 来压缩文件 使用这个包装器工作得很好 public void EncodeSingleFile FileStream inStream FileStrea
  • elasticsearch Rails - 非法纬度值

    当尝试从索引中的记录动态搜索纬度时 我得到了非法纬度值 当查看我的索引时 我看不到任何无效的纬度和经度值 所以我猜测这是我的代码中的错误 准确的错误 type query parsing exception reason illegal l
  • 文本查看字幕

    我想在主屏幕上放置一个textView 并且我需要跑马灯效果 public class MainWidget extends AppWidgetProvider int a RemoteViews remoteViews AppWidget
  • 更新 MKannotation 图像而不闪烁

    我想每 5 秒更新一次地图视图上的一些注释的图像 但是我不想将它们删除并重新添加到地图中 因为这会导致它们 闪烁 或刷新 即消失然后重新出现 我希望它是无缝的 我尝试过以下方法 get the current icon UserAnnota
  • Ruby 日期格式验证

    如何验证日期 2016 01 01 的格式是否正确 Y m d 例如我想得到true or false日期格式是否正确 伪代码 if 2016 01 01 Y m d puts date is valid else puts date is
  • 如何在 UPDATE 子句中使用 ROW_NUMBER()? [复制]

    这个问题在这里已经有答案了 ROW NUMBER 仅适用于SELECT中的条款MS SQL Server 但我想用它进行更新 如下所示 Update MyTab Set MyNo 123 ROW NUMBER over Order By I
  • Z80 ASM BNF 结构...我走在正确的轨道上吗?

    我正在尝试学习 BNF 并尝试汇编一些 Z80 ASM 代码 由于我对这两个领域都是新手 我的问题是 我是否走在正确的道路上 我正在尝试将 Z80 ASM 的格式编写为 EBNF 以便我可以弄清楚从那里到哪里从源代码创建机器代码 目前我有以
  • Express - POST 和 PUT 上的 400 个错误请求

    我需要一些帮助 因为我是 Node js 和 Express 的新手 我正在 Postman 上测试以下代码 const Joi require hapi joi const bodyParser require body parser L