bodyParser 似乎不起作用

2023-12-14

抱歉,如果这个问题听起来“简单”,但我不明白body-parser处理这个非常简单的例子:

"use strict";

const PORT = 3000;
const express = require("express");
const bodyParser = require("body-parser");
const app = express();

app.post("/api/login", (req, res) => {
  if (!req.body) return res.sendStatus(400);
  res.send("welcome, " + req.body.username);
});


app.use(express.json());
app.use(bodyParser.json());

console.log(`Listen on port ${PORT}`);
app.listen(PORT);

命令行尝试一下:

curl -H "Content-Type: application/json" -X POST -d '{"username":"xyz","password":"xyz"}' http://localhost:3000/api/login

而且它总是以 400 响应!我尝试了很多配置并没有找到解决方案。

我确信这很简单,因为似乎没有人有同样的错误,所以我错过了一些东西,但不知道是什么!

快递:4.16.2

主体解析器:1.18.2

感谢您的帮助 !

EDIT: 解决方案是我需要放置中间件before路线定义。我的情况,body-parser不需要我可以使用express.jon()内置 API。

"use strict";

const PORT = 3000;
const express = require("express");
const app = express();

app.use(express.json());

app.post("/api/login", (req, res) => {
  if (!req.body) return res.sendStatus(400);
  res.send("welcome, " + req.body.username);
});

console.log(`Listen on port ${PORT}`);
app.listen(PORT);

您在路由定义之后将 bodyparser 安装为中间件。通常,您需要在路由之前定义预路由中间件或将路由单独发送到不同的文件。

只需重新排列您的代码,如下所示:

'use strict'

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

app.use(bodyParser.json()) // note: this is before the route

app.post('/api/login', (req, res) => {
  console.log(req.body)
  if (!req.body) return res.sendStatus(400)
  res.send('welcome, ' + req.body.username)
})

app.use(express.json())

console.log(`Listen on port ${PORT}`)
app.listen(PORT)

如果你想在单独的文件中使用bodyparser作为中间件,常见的用法如下:

routes/someroute.js

const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()

module.exports = (app) => {

  app.post('/a/route', jsonParser, (req,res) => {
      ...
  })

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

bodyParser 似乎不起作用 的相关文章

随机推荐

  • 为什么 Android 测试运行程序报告“空测试套件”?

    我在这里用头撞墙 试图找出为什么 IntelliJ Android 报告 空测试套件 我有一个带有两个 IntelliJ 模块的小项目 Eclipse 中的 项目 单元测试模块有自己的 AndroidManifest xml 我已将其粘贴在
  • 使用通配符类型减少流

    我正在尝试Stream reduce 并且遇到了类型系统的障碍 这是一个玩具示例 public static Number reduceNum1 List
  • MYSQL 表创建,其中列具有默认值(表达式)

    我有一张桌子Employee id name dept name 我想要 id 为字母数字 dddddaaaaa 前 5 位数字将自动递增 ID 其余 4 个字符将是员工姓名的前 4 个字符 例如 对于第一个员工 name John Tod
  • 何时使用 google Gson 的 tojson 方法接受类型作为参数?公共字符串toJson(对象src,类型typeOfSrc)

    我正在尝试使用 Gson 的 toJson API 将我的对象转换为 JSON 字符串 当我遇到 2 个支持相同功能的不同 API 时 根据文档 公共字符串 toJson 对象 src 请注意 如果任何对象字段是泛型类型 则此方法可以正常工
  • PHP-PEAR require_once('DB.php');

    我对 PEAR PHP 有疑问 这是错误 Warning require once DB php failed to open stream No such file or directory in WWW xxx php on line
  • Python自引用for循环

    a 0 1 2 3 for a 1 in a print a 1 输出是0 1 2 2 为什么a 1 每次迭代都会改变 您的代码相当于 a 1 a 0 print a 1 a 1 a 1 print a 1 a 1 a 2 print a
  • 如何使用 jQuery 对 :before 选择器进行动画处理

    我有一些带有 before 伪选择器定义的元素 我需要为其添加一些过渡 动画 但在 CSS 中这是不可能的 所以我认为我可以用 jQuery 做到这一点 但有些东西工作不正常 你能帮助我吗 这是我的代码 var pilot remote c
  • 在 PHP 中同一服务器上的多个域之间共享会话

    我需要为我的一个项目实现一种解决方案 其中我有多个域 多个子域 并且它们都需要共享同一个会话 所有域和子域都将指向连接到单个数据库的单个应用程序 意味着如果用户从任何域登录将能够访问应用程序其他域的安全页面 用户可以通过点击链接或在浏览器中
  • 我对 jQuery 中淡入淡出的概念感到困惑

    我正在开发一个在线测试应用程序 并且我正在从 xml文件到jsp页面 所有问题都在jsp中使用for循环显示 现在我不希望所有问题都在一个页面中 而是希望当用户单击 下一步 按钮时将它们一一显示 所以这是我正在使用的代码 它是 仅显示第一个
  • Oracle 的 pro*C 编译器和 gnu C(__builtin_va_list、__attribute__ 等)

    我正在用 pro 编译数据库C 将 ppc 库文件转换为 gcc 可以使用的 c 文件 但是 我在专业版中遇到了很多错误C 像下面这样 PCC S 02201 Encountered the symbol attribute when ex
  • 将 Javascript 数组转换为 Java 数组

    我正在尝试将 Java 中的 Javascript 数组转换为 Java 数组 我正在使用 javax script 包 我在这里测试了这个例子 但是类型 NativeArray 未被识别 https stackoverflow com a
  • Yii2:用 Sweet Alert 替换 Gridview 使用的默认确认消息

    我在用yii2mod yii2 sweet alert在我的项目中 我在基本和高级主题上使用它 我喜欢它 问题 如何更改网格默认确认对话框 普通 JavaScript 确认 以便使用甜蜜警报为了让它看起来更好 我已经尝试修改按钮的删除模板
  • PHP - 获取 ADODB 中受影响的行

    我使用 ADODB 创建到数据库的连接 我更新了数据库中的数据 没有错误 问题是我无法通过以下方式获取受影响的行数Affected Rows 我尝试使用非常简单的代码 但它不起作用 这是我的代码 sql UPDATE User SET Na
  • 异常:无法在控制器管理的 UINavigationBar 上手动设置委托

    我的应用程序从登录屏幕开始 然后继续CreateRequestTableViewController 并且所有内容都嵌入在导航控制器中 因此后退按钮CreateRequestvc 返回到登录屏幕 我想询问用户在注销之前是否确定自己是这样 并
  • 如何在C++ OpenCV中将图像(Mat)转换为inputArray?

    我想对灰度图像的强度值应用 k 均值聚类 我对如何将像素表示为向量感到非常困惑 所以如果我的形象是H x W像素 那么我的向量应该是H W维度 我尝试过的是 int myClass myFunction const cv Mat img c
  • 将 PDF 加载到 android webview 中

    in my android我必须加载的应用程序PDFs在服务器中进入webview 根据我使用的堆栈溢出问题谷歌文档视图在加载它时 但我的问题是有时它不显示文件webview而在另一个例子中它显示得很好 我无法弄清楚问题所在 但代码看起来没
  • genymotion:“player.exe 停止工作”

    我从他们的官方网站安装了 Windows 7 版的 GENYMOTION 软件包 它为我安装了 Oracle VM VirtualBox 和 Genymotion 之后 我打开 VirtualBox 然后打开 Genymotion 下载 G
  • 如何访问 WordPress.com 网站的 WP REST API?

    我看到 WordPress com 最近开始使用 Gutenberg 它依赖于 WP REST API 我正在构建一个插件 我想使用自托管站点中的 WP REST API 并让它与 WordPress com 站点通信 但我在查找 REST
  • 使用 jQuery 进行主动导航 - 无法将默认类应用于锚点

    我目前正在尝试制作一个navigation menu其中一个active class应用于锚点 其href与当前 URL 匹配的属性 因此我可以设置该锚点的样式 使其从菜单的其余部分中脱颖而出 这是我的标记 div h2 Navigatio
  • bodyParser 似乎不起作用

    抱歉 如果这个问题听起来 简单 但我不明白body parser处理这个非常简单的例子 use strict const PORT 3000 const express require express const bodyParser re