2015-06-22 69 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的对象结构... –