【问题标题】:Express.js does not accept does not accept an large set of array of objectsExpress.js 不接受 不接受大量对象数组
【发布时间】:2020-12-20 05:53:17
【问题描述】:

我正在使用 Express.js 创建 api 并通过 express-validator 对其进行验证,我正在尝试发送大量数据,其中包含一个包含 2000 多个对象的数组。 您可以将数组创建为

const ids = Array(2000)
  .fill(0)
  .map((_, index) => {
    return {
      "A": "1",
      "B": "2",
      "C": "0",
      "D": "MO",
      "E": "1",
      "F": "0",
      "G": "XYZ",
      "H": "000",
      "I": "999"
    };
  });

我正在使用 axios 调用 api。

axios.post('/demo', {
  d:ids,
});

这是我的 api

app.post('/demo', async (req, res, next) => {
    console.log(req.body);
    const errors = validationResult(req);
    console.log('---- errors', errors);
    res.end('hello world');
  }
);

现在,当我登录 req.body 时,它会显示空对象 {}。这是因为 express 无法读取这个数组还是我做错了什么。

【问题讨论】:

  • 您是否有合适的 Express 中间件来解析正文并填充 req.body?默认情况下,Express 不读取正文,因此在req.body 中没有任何内容。如果您要发送 JSON,那么您需要在路由处理程序之前使用 app.use(express.json())

标签: node.js express express-validator


【解决方案1】:

在 app.post 之前在你的 server.js 或 app.js 中试试这个

express.json() 是 express 内置的一种方法,用于将传入的请求对象识别为 JSON 对象。此方法在您的应用程序中作为中间件调用,代码如下:

app.use(express.json())

express.urlencoded() 是 express 内置的一种方法,用于将传入的请求对象识别为字符串或数组。此方法在您的应用程序中作为中间件调用,代码如下:

app.use(express.urlencoded());

更多解释refer this

还有一种可能是超出了默认大小限制。因此,在这种情况下,您可以手动设置请求大小限制。

app.use(express.json({limit:'2mb'}))

更多解释refer this

【讨论】:

  • 我认为超出了请求大小限制,所以通过添加 app.use(express.json({ limit: '2mb' })); 解决了我的问题
  • 如果它有效,那就太好了,感谢您的更新,请随时编辑我的答案并将限制大小添加到代码中,以便将来对其他人有所帮助,如果您可以接受作为您的解决方案的答案会很棒:)
猜你喜欢
  • 2019-07-28
  • 2017-11-24
  • 1970-01-01
  • 2020-03-31
  • 2019-09-02
  • 1970-01-01
  • 2012-11-19
  • 2011-03-18
  • 1970-01-01
相关资源
最近更新 更多