使用 body-parser bodyParser.json() 时为空 json
empty json when using body-parser bodyParser.json()
我正在尝试通过 HTML 页面中的脚本将长 json 作为 post 请求发送,例如:(数据来自文本框,它是一个正确的数组json)
<script>
/* UPDATE ORGANIZATION LIST*/
function updateOrgs () {
var data = $('#showOrgs').val();
$.ajax({
url : "http://localhost:8000/api/updateOrgs",
type: "POST", // data type (can be get, post, put, delete)
data : {json:JSON.parse(data)}, // data in json format
async : false, // enable or disable async (optional, but suggested as false if you need to populate data afterwards)
success: function(response, textStatus, jqXHR) {
alert(response);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown)
}
});
}
</script>
我已将快递设置为:
const express = require('express');
var bodyParser = require('body-parser')
// initialize express
const app = express();
// body-parser
// create application/json parser
var jsonParser = bodyParser.json()
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({extended: false})
我在我的 node express 应用程序中使用 body-parser 来读取正文中的 json,例如:
app.post('/api/updateOrgs', jsonParser, (req, res)=> {
try {
console.log(req.body);
// send response
res.send('Successfully updated');
} catch (e) {
res.send(e);
}
});
问题 是我的 express 应用程序打印了一个空对象 {}
。是不是因为我正在 posting 的 json 文件很大?它在一个数组中有 64 个对象。
或者问题出在使用 body-parser 模块的 express 应用 app.post('/api/updateOrgs', jsonParser, (req, res)=> {
?
bodyParser
object 公开各种工厂以创建中间件。当 Content-Type 请求 header 匹配类型选项时,所有中间件将使用解析的 body 填充 req.body 属性,或者一个空的 object ( {}) 如果没有 body 解析,则 Content-Type 不匹配,或者发生错误。
bodyParser.json([选项])
Returns 中间件只解析 json 并且只查看 Content-Type header 匹配类型选项的请求。此解析器接受 body 的任何 Unicode 编码并支持 gzip 和 deflate 编码的自动 inflation。
包含已解析数据的新 body object 在请求 object 中间件之后填充(即 req.body)。
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
res.send('welcome, ' + req.body.username)
})
// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
// create user in req.body
})
更改解析器接受的类型
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse various different custom JSON types as JSON
app.use(bodyParser.json({ type: 'application/*+json' }))
// parse some custom thing into a Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
// parse an HTML body into a string
app.use(bodyParser.text({ type: 'text/html' }))
试一试:
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify({json:JSON.parse(data)}),
所有代码:
<script>
/* UPDATE ORGANIZATION LIST*/
function updateOrgs () {
var data = $('#showOrgs').val();
$.ajax({
url : "http://localhost:8000/api/updateOrgs",
type: "POST", // data type (can be get, post, put, delete)
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify({json:JSON.parse(data)}), // data in json format
async : false, // enable or disable async (optional, but suggested as false if you need to populate data afterwards)
success: function(response, textStatus, jqXHR) {
alert(response);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown)
}
});
}
</script>
我正在尝试通过 HTML 页面中的脚本将长 json 作为 post 请求发送,例如:(数据来自文本框,它是一个正确的数组json)
<script>
/* UPDATE ORGANIZATION LIST*/
function updateOrgs () {
var data = $('#showOrgs').val();
$.ajax({
url : "http://localhost:8000/api/updateOrgs",
type: "POST", // data type (can be get, post, put, delete)
data : {json:JSON.parse(data)}, // data in json format
async : false, // enable or disable async (optional, but suggested as false if you need to populate data afterwards)
success: function(response, textStatus, jqXHR) {
alert(response);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown)
}
});
}
</script>
我已将快递设置为:
const express = require('express');
var bodyParser = require('body-parser')
// initialize express
const app = express();
// body-parser
// create application/json parser
var jsonParser = bodyParser.json()
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({extended: false})
我在我的 node express 应用程序中使用 body-parser 来读取正文中的 json,例如:
app.post('/api/updateOrgs', jsonParser, (req, res)=> {
try {
console.log(req.body);
// send response
res.send('Successfully updated');
} catch (e) {
res.send(e);
}
});
问题 是我的 express 应用程序打印了一个空对象 {}
。是不是因为我正在 posting 的 json 文件很大?它在一个数组中有 64 个对象。
或者问题出在使用 body-parser 模块的 express 应用 app.post('/api/updateOrgs', jsonParser, (req, res)=> {
?
bodyParser
object 公开各种工厂以创建中间件。当 Content-Type 请求 header 匹配类型选项时,所有中间件将使用解析的 body 填充 req.body 属性,或者一个空的 object ( {}) 如果没有 body 解析,则 Content-Type 不匹配,或者发生错误。
bodyParser.json([选项])
Returns 中间件只解析 json 并且只查看 Content-Type header 匹配类型选项的请求。此解析器接受 body 的任何 Unicode 编码并支持 gzip 和 deflate 编码的自动 inflation。
包含已解析数据的新 body object 在请求 object 中间件之后填充(即 req.body)。
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
res.send('welcome, ' + req.body.username)
})
// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
// create user in req.body
})
更改解析器接受的类型
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse various different custom JSON types as JSON
app.use(bodyParser.json({ type: 'application/*+json' }))
// parse some custom thing into a Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
// parse an HTML body into a string
app.use(bodyParser.text({ type: 'text/html' }))
试一试:
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify({json:JSON.parse(data)}),
所有代码:
<script>
/* UPDATE ORGANIZATION LIST*/
function updateOrgs () {
var data = $('#showOrgs').val();
$.ajax({
url : "http://localhost:8000/api/updateOrgs",
type: "POST", // data type (can be get, post, put, delete)
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify({json:JSON.parse(data)}), // data in json format
async : false, // enable or disable async (optional, but suggested as false if you need to populate data afterwards)
success: function(response, textStatus, jqXHR) {
alert(response);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown)
}
});
}
</script>