2016-11-11 54 views
0

我已經建立了一個節點服務器,將請求傳遞給一個實用程序類。 到目前爲止,POST請求被命中,但是對body屬性值的映射是未定義的。 Bodyparser也用於post方法來協助Json解析。如何從express服務器的請求主體中解析JSON屬性?

我踏進請求和看到,主體填充並認爲這是顯示在下面的膏中的屬性名稱是正確的:

body: { '{\n\t"Email":"[email protected]",\n\t"Dashboard_Name":"my dash 4",\n\t''},

但下面映射到的值通過req.body.propertyname assinged返回undefined:

var p_email = req.body.Email; 
var p_dashboardName = req.body.Dashboard_Name; 

問:

如何從快速服務器的請求主體中解析JSON屬性?

JSON對象發佈:

這是我用郵差發布到服務器的JSON:

{ 
    "Email":"[email protected]", 
    "Dashboard_Name":"my dash 4" 

} 

要旨Express服務器和相關的實用方法SaveUserProfile:

Express服務器 -

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; 


    }; 
+1

您使用哪種版本的express? – Kalman

+0

4.1表示我們上次更新。 –

回答

1

原來我有不正確的內容類型集郵遞員對象被張貼。需要設置爲:

application/json; charset=UTF-8 
-1

目前,你有沒有喜歡,如果身體parser.json解析器已經產生,這似乎明顯的地方開始考慮到內容的錯誤辦法知道是有,但結果ISN 「T。

我看了一下身體解析器,發現了一個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)中的內容,並將其通過像jsonlint.com這樣的json驗證程序網站,就像雙重檢查一樣,看看body-parser是否返回任何錯誤。