2015-06-22 68 views
1

我已經開始使用節點服務器的新網站以更熟悉node.js,並將數據發佈到服務器,但我無法弄清楚如何在請求讀取JSON數據:從節點中的請求中提取JSON數據

客戶端請求:

function addSymptom(name) { 

     $.ajax({ 
      type: 'POST', 
      url: '/addSymptom', 
      data: { 
       symName: name 
      }, 
      success: function (data) { 
       listSymptoms(); 
      }, 
      contentType: "application/json", 
      dataType: 'json' 
     }); 

    } 

服務器處理器:

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

     var newSymptom = req.body; 
     console.log(newSymptom); // undefined :(

     res.send(JSON.stringify({ 
      result: 'success' 
     })); 
    }); 

爲什麼request.body不確定?有沒有不同的方式,我應該讀取請求正文中的'symName'字段?

+0

什麼HTTP庫都在服務器上使用?表現? – Quentin

+0

是的,我使用快遞。還有一個名爲body-parser的庫,但我不確定如何使用它,或者甚至可能在req.body爲空的情況下使用它? –

回答

3

一定要對Node.js的添加bodyParser模塊..

如果你使用快速3.X/4.x中你只需要確保你有bodyParser包括:

  1. 快車3.x的

    app.use(express.bodyParser({limit : '50mb'})); 
    
  2. 快遞4.x的

在你的包文件:

"body-parser": "~1.0.0", 

或交替運行NPM-安裝體解析器

然後在您的Node.js服務器:

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

// create our app 
var app = express(); 

// instruct the app to use the `bodyParser()` middleware for all routes 
app.use(bodyParser()); 

鏈接到一個例子: http://code.runnable.com/U0sU598vXio2uD-1/example-reading-form-input-with-express-4-0-and-body-parser-for-node-js 3.沒有快遞

如果由於某種原因,你決定不t o使用express,您將需要綁定到套接字的數據處理程序以讀取數據。

這裏是關於此事的文章: http://blog.frankgrimm.net/2010/11/howto-access-http-message-body-post-data-in-node-js/

+0

我不得不單獨添加body-parser,因爲它不再與express捆綁在一起。我如何實現它? –

+0

@drminnaar查看express 4.x,就好像它不是bundle,你需要包含body-parser組件。 –

+0

好吧,我已經啓動並運行了,它似乎已經生成了body,但是它給了我一個無效json的例外。考慮到我從客戶端發送的json,它看起來是否格式嚴格嗎?很高興看到req.body的對象結構... –