Express.js:POST数据作为req.body对象的KEY而不是req.body的VALUE?
来自我正在做的客户:
$.ajax({ url: '/create', type: 'POST', data: JSON.stringify({ theme: "somevalue", snippet: { name: "somename", content: "somevalue" } }), complete: function (response) { } });
在服务器上( 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; });
我预计dataReceived
的值是:
{ "theme" : "somevalue", "snippet" : { "name": "somename", "content" : "somevalue" } }
dataReceived
的值是:
{ '{"theme":"somevalue","snippet":"name":"somename","content":"somevalue"}}': '' }
这真的很奇怪,我找不到我做错了什么。 有任何想法吗?
从BodyParser模块文档 :
bodyParser.urlencoded(选项)
返回仅parsingurlencoded主体的中间件。 此parsing器只接受身体的UTF-8编码,并支持gzip和deflate编码的自动膨胀。
在中间件之后的请求对象(即req.body)上填充包含parsing的数据的新的主体对象。 该对象将包含键值对,其中值可以是string或数组(当扩展为false时)或任何types(当扩展为true时)。
这与我的问题有关吗?
在客户端删除string化
$.ajax({ url: '/create', type: 'POST', data: { theme: "somevalue", snippet: { name: "somename", content: "somevalue" } }, complete: function (response) { } });
或者在服务器端重新parsing
app.post('/create', function (req, res) { var dataReceived = JSON.parse(req.body); });