2015-09-26 63 views
0

目標:我是Node.js和Express.js框架的新手。目前,我正在使用IONIC框架編寫一個小應用程序,我試圖將FirstName,LastName等用戶基本信息作爲第一步傳遞給node.js服務器。然後,一旦我讀取數據,我打算將數據保存在數據庫中。無法從Express.js中的req.body中讀取帖子參數4.13.x

問題:目前,當我從我的應用程序的節點JS服務器傳遞信息(在這種情況下,只是名字用於測試目的)通過POST請求,當我嘗試訪問使用req.body.FirstName的名字,服務器返回"undefined" 。但是,當我使用console.log(req.body)它返回的值爲eg., { '{"FirstName":"test"}': '' }.

我不知道我錯過了哪裏。我想我通過谷歌提到了很多鏈接,似乎沒有什麼可以解決的。這可能是一件簡單的事情,但它困擾我很多,我正在浪費時間來找到解決方案。

配置: Express.js - 4.13.3

我基於對這一問題的相關鏈接嘗試了不同的組合。似乎沒有任何工作。任何指導或建議將會非常有幫助,因爲我受到了打擊。

serverapp.js

從Controllers.js
var express = require('express'); 
var app = express(); 

var bodyParser = require('body-parser'); 

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header('Access-Control-Allow-Methods', 'GET,POST'); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 


app.post('/', function(req, res) { 

    console.log("Hi from server", req.body); 
    console.log("Hi this is key value", req.body.FirstName); // this throws error as undefined 

}); 

    var server = app.listen(8100, function() { 
    var host = server.address().address; 
    var port = server.address().port; 

    console.log('Example app listening at http://%s:%s', host, port); 
}); 

代碼片段 - POST請求通過這個發送。

var url = 'http://localhost:8100' 
     var request = $http.post(url, 
       {'FirstName': $scope.Model.FName}, {headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}); 

Rego.html文件

<form name="tab-Registration.form"> 
       <div class="list" align="left"> 

        <label class="all_page_bgColor" align="left"> 
         <input type="text" name="FName" placeholder="First Name" ng-model="Model.FName" class="all_page_bgColor" align="left"> 
        </label> 
        <label class="all_page_bgColor" align="left"> 
         <input type="text" name="LName" placeholder="Last Name" ng-model="Model.LName" class="all_page_bgColor" align="left"> 
        </label> 
        <label class="all_page_bgColor" align="left"> <!-- class="item item-input" --> 
         <input type="text" name="Email" placeholder="Email" ng-model="Model.Email" class="all_page_bgColor" align="left"> 
        </label> 
        <label class="all_page_bgColor" align="left"> 
         <input type="text" name="PhoneNo" placeholder="Phone" ng-model="Model.PhoneNo" class="all_page_bgColor" align="left"> 
        </label> 

       </div> 
       <div align = "center"> 
        <button class="button button-assertive" ng-click="submit()">Submit</button> 

       </div> 
      </form> 

回答

1

該目的{ '{"FirstName":"test"}': '' }只有一個鍵是{"FirstName":"test"},值是空字符串。其實整個對象是第一個價值的關鍵。

對象必須是這樣的:{"FirstName":"test"}

但我不知道事情是如何結束這個樣子。你的表單中有FName,但你得到了這個,我不知道這個IONIC框架是什麼以及它是如何工作的。我認爲最好先試用express.js,然後切換到更高級別的框架。

+0

我試圖使用下面的var keys = Object.keys(req.body); console.log(鍵[0])返回{「FirstName」:「Baranidharan」}但無法讀取FirstName的值。如果有人可以建議,這對我很有幫助 – Brad

+0

@Brad關鍵必須是名字不是{「FirstName」:「Baranidharan」} – Ali

+0

感謝您的更新。我嘗試使用鍵[0] .FirstName,但它仍然返回undefined。不確定如何解決這個問題。如果我沒有從req.body中獲得任何價值,那麼這是一個不同的問題。我在這裏得到了價值,無法讀取它。真的被打了一段時間,無法繼續。不知道是否因爲我是新人而錯過了一件小事。如果你可以或任何人都可以幫助,這將是非常有用的.. – Brad

0

我解決了這個問題。解決方案是使用transformRequest,同時將請求發送到服務器以獲得URL編碼數據,請求發送到服務器的請求默認發送Json對象。而當你想要超越,你必須使用transformRequest

$http({ 
       method: 'POST', 
       url: url, 
       headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
       transformRequest: function(obj) { 
       var str = []; 
       for(var p in obj) 
       str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
       return str.join("&"); 
       }, 

       data: { 
       FirstName: $scope.Model.FName}