前端代码,类似于
var data = {
keywords: "...",
name: "123"
};
$.ajax({
url: "url",
type: "POST",
dataType: "json",
data: JSON.stringify(self.getData())
}).done(function (data) {
// todo
});
express代码
var express = require("express");
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json())
app.use(require('body-parser').urlencoded({ extended: true }))
app.post("/api/url", function (req, res) {
var test = req.body
console.log(test)
});
此处的test预想应为
{
keywords: "...",
name: "123"
}
实际上是
{
'{
keywords: "...",
name: "123"
}' : ""
}
如果去掉JSON.stringify,可以获得正确的值,但如果非要用这个的话(前端代码不能修改的情况下)
node这边有什么方法可以获得正确的值么
放开让我来!
问题完全是因为 request 的 Content-Type 有问题!
jQuery Ajax 默认用的是 'application/x-www-form-urlencoded; charset=UTF-8'
也就是说 body 部分默认按照 url 解析方式解析,就是 request.body 部分按照
key=value&foo=bar
方式解析,解析后得到 {key:value,foo:bar}. 你传递一个 JSON.stringify 后的 json string, 那就等价于传递{"a":1}=
, 你把 json string 当 key 了!正确姿势:contentType: "multipart/form-data"