Node JS req.body 未定义

2023-12-24

我浏览了很多其他帖子,但我对此感到非常迷失。

我可以运行一个console.log(req)并得到以下输出

ServerResponse {
  ...
  req: 
   IncomingMessage {
    ...
     url: '/my-endpoint',
     method: 'POST',
     statusCode: null,
     statusMessage: null,
     ...
     body: { foo: 'bar' },
     _body: true,
     ...
     route: Route { path: '/my-endpoint', stack: [Object], methods: [Object] } },
  ...

看起来很坚固,所以我希望这样做console.log(req.body)并得到{ foo: 'bar' }回到控制台...但是不,变得未定义

经过研究,我发现这可能与我的情况有关app.js文件,特别是body-parser,但是,我已经拥有了所有这些

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var http = require('http');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

//Home Page Rendering
var index = require('./routes/index');
app.use('/', index);

// All other routes are kept in the `routes` module
require('./routes')(app);

module.exports = app;

routes.js

module.exports = function routing(app) {
  var apiClient = require('./services/apiClient');

  app.post('/get-device-info', function(err, req, res){
    console.log("/get-device-info routes");
    apiClient(req, res);
  });
};

apiClient.js

module.exports = function callApi(req, res){
  console.log(req);
  console.log(req.body)
};

index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

这是我尝试过的

app.use(express.bodyParser());

确保传入请求显式声明 application/json

以其他方式声明 body parser.json

添加配置功能


你的问题是 Express 不使用错误第一个回调 http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/为其路线处理程序。下面的代码将不起作用,因为app.post处理程序没有签名(req, res) => {}。在下面的代码中err等于req, req等于res, and res等于next.

// routes.js
module.exports = function routing(app) {
  var apiClient = require('./services/apiClient');

  app.post('/get-device-info', function(err, req, res){
    console.log("/get-device-info routes");

    // Assuming the request is correct 
    // the value of body will be the request body  
    console.log(res.body)

    apiClient(req, res);
  });
};`

您可以在 Express 中使用 3 种不同的路由回调签名

  • (req, res) => {}- 这是最基本的,定义了一个只关心请求和响应的路由
  • (req, res, next) => {}- 这是中间件回调签名,看起来像基本的路由回调,但是,它还分配next告诉 Express 调用下一个匹配路由的对象。
  • (err, req, res, next) => {}- 这是错误处理路由回调,每个 Express Router 中间件或 Express 应用程序只需要 1 个。如果它被调用next(err)在路由或中间件中调用。更具体地说,如果next()不使用字符串或任何内容调用,它将跳过所有剩余的中间件和路由并直接进入错误处理程序。您可以在中阅读更多相关信息快速文档 http://expressjs.com/en/guide/error-handling.html

您需要将路线定义更改为

app.post('/get-device-info', (req, res) => {
  apiClient(req, res)
})

或者你甚至可以这样做

module.exports = app => {
  let apiClient = require('./services/apiClient')

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

Node JS req.body 未定义 的相关文章

随机推荐

  • 在选中列表框中创建选中项目的字符串数组

    如何使用 foreach 循环 或任何其他方式 创建一个包含 checklistbox 中选中项目的数组 我无法知道列表中的项目数量 假设您使用 3 5 或更高版本 object items lb CheckedItems OfType T
  • 凿子3.功能模块Mux4

    我正在按照文档学习 Chisel在 Github 上 https github com ucb bar chisel3 wiki Short 20Users 20Guide 20to 20Chisel 到目前为止 一切都完美无缺 但我还是卡
  • 使用 INSERT 和 AUTO-INCREMENT 列的 SQL 语句中出现错误

    INSERT INTO configuration VALUES News Box Character Count NEWS BOX CHAR COUNT 200 Set the number of characters bytes tha
  • 如何实现制表符补全

    我试图弄清楚如何在 C 应用程序中实现子命令的制表符补全 我希望它的功能与 Git 的制表符补全非常相似 我正在浏览 Git 的源代码 但它并没有引起我的注意 我已经搜索了实现选项卡完成的方法 但没有找到直接的答案 因此我猜测它可能不一定是
  • 如何将hashMap转换为Json文件

    我是偏向Java的 我必须使用 rpc 将 Hashmap 传输到服务器 HashMap Map
  • 在给定 sqlite 进度的情况下,在 Android 中存储图像的规范方法

    我完全清楚 通常不建议将图像作为 blob 存储在数据库中 但我最近遇到this https www sqlite org fasterthanfs html网站记录了 sqlite 在向数据库读取和写入图像 blob 方面的性能提升 简而
  • Android 错误:应用程序意外停止,请重试

    我制作了一个运行良好的应用程序 它显示应用程序已启动的次数 这是代码 import android app Activity import android content SharedPreferences import android o
  • “释放未使用的内核内存”从何而来?

    我经常看到Freeing unused kernel memory xxxK from dmesg 但在 grep rg 的帮助下我永远无法从内核源代码中找到此日志 它从何而来 该行文本不作为单个完整字符串存在 因此您无法对其进行 grep
  • 如何在 Android 的 Volley 中创建一个新的 newRequestQueue

    我有一个片段 我尝试实例化一个新的newRequestQueue使用 Volley API 我尝试像这样实例化它 RequestQueue queue Volley newRequestQueue this 但是 当我尝试创建请求时 出现以
  • 完全删除 Angular4 中的测试

    我使用构建了一个非常小的应用程序angular4 我有一个主应用程序组件 两个子组件和一项服务 我觉得我不需要对这么小的应用程序进行测试 并且想删除与使项目更干净相关的所有测试 所以我的问题是我可以从项目中删除哪些与测试相关的文件 我已经删
  • 选择当前聚焦的元素

    我想在整个文档中找到当前关注的元素 我尝试使用 focusjQuery 1 6 引入的伪类 document find focus But document find focus length总是返回0 您应该能够使用activeEleme
  • 这是矫枉过正,还是对 CakePHP 的 HTML 帮助器的良好利用?

    我刚刚重新格式化了 CakePHP 应用程序的默认布局 我通过将几乎所有内容都放在 html 帮助器方法中来消除尽可能多的内联 html 这很有趣 但我想知道我从这次练习中获得了什么好处 如果有的话
  • 将数组的每个对应元素转换为r中的向量

    我有大量数组 希望将所有这些数组中特定位置的所有元素转换为向量 也就是说 如果我有 2 个数组 如下所示 39 1 2 3 4 5 1 0 00000000 0 00000000 0 0000000 0 000000 0 2 0 06703
  • Ruby Timeout::timeout 不会引发异常,也不会返回记录的内容

    我有这段代码 begin complete results Timeout timeout 4 do results platform search artist album name end rescue Timeout Error pu
  • 如何在Camel路由中使用上下文路径?

    我是骆驼新手 我正在 spring boot 中做一个项目 使用camel作为路由 我注意到 当我去 SwaggerUi 查看 Post 调用的正确功能时 路由的 contextPath 不起作用 public void configure
  • 如何准确测量 C++ 函数使用的时钟周期?

    我知道我必须使用 rdtsc 测量的函数是确定性的 但结果远不能重复 每次运行我得到 5 的振荡 可能的原因有 上下文切换 缓存未命中 您还知道其他原因吗 如何消除它们 TSC 什么rdtsc使用 在多处理器系统上通常不同步 它可能有助于设
  • SparkSQL 超前/滞后函数中的动态/变量偏移

    我们可以以某种方式使用取决于 Spark SQL 中的领先 滞后函数中的列值的偏移值吗 示例 以下是运行良好的方法 val sampleData Seq bob Developer 125000 mark Developer 108000
  • 获取前 10 个未使用的手册序列号

    我想从某个范围中查找前 10 个未使用的手动序列号 请在下面找到我的查询 select X1 From Select Rownum seq number From Dual Connect By Rownum lt Select LPAD
  • 清除SqlDataSource中的缓存

    我需要在启用缓存的情况下手动清除 SqlDataSource 上的缓存 我尝试设置 EnableChaching false 和 CacheDuration 0 以及 1 但似乎没有一个会使缓存中已有的内容过期 尽管它们似乎确实阻止了新的
  • Node JS req.body 未定义

    我浏览了很多其他帖子 但我对此感到非常迷失 我可以运行一个console log req 并得到以下输出 ServerResponse req IncomingMessage url my endpoint method POST stat