Express.js:POST 数据作为 req.body 对象的 KEY 而不是 req.body 的 VALUE?

Spr*_*der 5 post json node.js express

来自我正在做的客户:

$.ajax({
        url: '/create',
        type: 'POST',
        data: JSON.stringify({
            theme: "somevalue",
            snippet: {
                name: "somename",
                content: "somevalue"
            }
        }), 
        complete: function (response)
        {

        }
    });
Run Code Online (Sandbox Code Playgroud)

在服务器 ( node.js/express.js) 上我正在做:

var app = express();
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
.......
... 
app.post('/create', function (req, res)
{
   var dataReceived = req.body;
});
Run Code Online (Sandbox Code Playgroud)

我预计的值为 dataReceived

{
   "theme" : "somevalue",
   "snippet" : {
     "name": "somename",
     "content" : "somevalue"
   } 
}
Run Code Online (Sandbox Code Playgroud)

取而代之的dataReceived是:

{ 
 '{"theme":"somevalue","snippet":"name":"somename","content":"somevalue"}}': '' 
}
Run Code Online (Sandbox Code Playgroud)

这真的很奇怪,我找不到我做错了什么。有任何想法吗?

来自BodyParser 模块文档

bodyParser.urlencoded(选项)

返回仅解析 urlencoded 主体的中间件。此解析器仅接受主体的 UTF-8 编码,并支持 gzip 和 deflate 编码的自动膨胀。

包含解析数据的新主体对象填充在中间件之后的请求对象上(即 req.body)。该对象将包含键值对,其中值可以是字符串或数组(当扩展为假时)或任何类型(当扩展为真时)。

这与我的问题有关吗?

Sam*_*tri 4

删除客户端中的 Stringify

$.ajax({
        url: '/create',
        type: 'POST',
        data: {
            theme: "somevalue",
            snippet: {
                name: "somename",
                content: "somevalue"
            }
        }, 
        complete: function (response)
        {

        }
    });
Run Code Online (Sandbox Code Playgroud)

或者在服务器端再次解析它

app.post('/create', function (req, res)
{
   var dataReceived = JSON.parse(req.body);
});
Run Code Online (Sandbox Code Playgroud)