我已经设置了一个将请求传递给实用程序类的节点服务器。
到目前为止,POST
请求被命中,但是未定义到body属性值的映射。 Bodyparser也用在post方法中以协助Json解析。
我进入了请求,看到正文已填充,并且看到属性名称正确,如下面的粘贴所示:
body: { '{\n\t"Email":"brian@gmail.com",\n\t"Dashboard_Name":"my dash 4",\n\t''},
但是下面映射到通过req.body.propertyname
分配的值会返回undefined:
var p_email = req.body.Email;
var p_dashboardName = req.body.Dashboard_Name;
问题:
如何解析快速服务器中请求主体的JSON属性?
发布的JSON对象:
这是我使用Postman发布到服务器的JSON:
{
"Email":"brian@gmail.com",
"Dashboard_Name":"my dash 4"
}
快递服务器的Gist 及相关的实用程序方法SaveUserProfile:
快速服务器 -
var express = require('express');
var UserLDAP = require('./utilities/UserLDAP'); //utility file containing the POST method
var bodyParser = require('body-parser');
const url = require('url');
const app = express();
var sql = require('mssql');
const cors = require('cors');
const path = require('path');
sql.connect("********************************************************************")
.then((connection1) => {
sql.globalConnection = connection1;
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/OOO/SaveUserProfile', UserLDAP.SaveUserProfile)
app.listen(process.env.PORT || 4000 );
logger.info(`listening to port ${process.env.PORT}`);
}).catch((err) => {
res.status(500).send(err.message);
logger.error(err.message);
});
UserLDAP.js -
var sql = require('mssql');
var bodyParser = require('body-parser');
//Save User Profile
exports.SaveUserProfile = function(req, res) {
req.app.use(bodyParser.json());
req.app.use(bodyParser.urlencoded({ extended: true }));
var request = new sql.Request(sql.globalConnection);
console.log(req);
var p_email = req.body.Email;
var p_dashboardName = req.body.Dashboard_Name;
};
答案 0 :(得分:1)
原来我在Postman上发布的对象上设置的内容类型不正确。需要设置为:
application/json; charset=UTF-8
答案 1 :(得分:-1)
目前你无法知道像body-parser.json这样的解析器是否产生了一个错误,如果内容存在,这似乎是一个明显的起点,但结果却没有。
我看了一下body-parser,发现了一个issue,它解决了检测json错误的问题,我希望这些错误很有用。
开发人员建议将以下内容作为一种方法。
app.use(errorFork(bodyParser.json(),
function (err, req, res, next) {
// do stuff with only body parser errors
}))
// this is an example; you can use any pattern you like.
function errorFork(middleware, errorHandler) {
middleware(req, res, function (err) {
if (err) {
return errorHandler(err, req, res, next)
}else{
return next()
}
})
}
这不是一个修复,但它会给你更多的信息。通过你所说的questin是什么解析出现问题?我注意到你粘贴的身体内容的另一件事是它是无效的json(忽略\ n \ t)你有一些胭脂'
,值得检查。尝试复制正文(raw)中的内容并将其放入json验证器网站(如jsonlint.com),只需进行双重检查,然后查看正文解析器是否返回任何错误。