首页 > 解决方案 > 如何在 NodeJs 中使用 express 从请求中提取正文?

问题描述

我正在express为我的应用程序使用 Node.Js 和框架。

我构建了 HTML 表单,提交后我无法收到form有关 API 请求的数据。

我的 HTML:

<form method="post" action="/create">
    <input type="text" name="user.name" />
    <input type="text" name="user.email" />
    <input type="text" name="user.address.city" />
    <input type="text" name="user.address.land" />
    <input type="submit" value="Submit">
</form>

JSON 对象应该在我的 API 中获得:

{
   "user": {
      "name": "toto",
      "email": "toto@mail.com",
      "address": {
         "city": "yyyyy",
         "land": "zzzz"
      }
   }
}

如何使用 Node.js、Express 4 做到这一点,是否还有另一个库呢?

标签: javascriptnode.jsexpress

解决方案


您可以准备自己的中间件,使用 body-parser 解析传入的表单数据urlencoded()并将其转换为结构化 JSON:

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

function setDeepValue(path, obj, value) {
  const tokens = path.split('.');
  const last = tokens.pop();
  for (const token of tokens) {
    if (!obj.hasOwnProperty(token)) {
      obj[token] = {};
    }
    obj = obj[token];
  }
  obj[last] = value;
}

app.use(bodyParser.urlencoded(), function(req, res, next) {
  let obj = {};
  for (const key in req.body) {
    setDeepValue(key, obj, req.body[key]);
  }
  req.body = obj;
  next();
});

app.post('/create', function(req, res) {
  console.log(req.body)
})

推荐阅读