如何从快速服务器中的请求主体解析JSON属性?

时间:2016-11-11 14:49:35

标签: json node.js express post

我已经设置了一个将请求传递给实用程序类的节点服务器。 到目前为止,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;


    };

2 个答案:

答案 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),只需进行双重检查,然后查看正文解析器是否返回任何错误。