Node.js – 如何初始化/定义req.body?

我在“var score – req.body.score”处得到错误 – “无法读取属性”得分“undefined”。 为了做到这一点,我猜我需要定义和/或初始化'req.body'(我对Node.js很新奇),我怎么做到这一点?

这是我的Node.JS代码:

var http = require('http'); var express = require('express'); console.log('Game server running...'); http.createServer(function (req, res) { console.log('Player submitted high-score:'); var score = req.body.score; console.log(score); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('_testcb(\'"Your high-score has been submitted."\')'); }).listen(80); 

下面是带有input文本字段和提交button的HTML:

 Your score: <input id="score" name="score" type="text"></input> <button id="SubmitBtn" type="submit">Submit</button> 

以下也是HTML中的JavaScript(以防万一,这有助于回答我的问题):

 <script> $(document).ready(function() { $('#SubmitBtn').click(function (event) { $.ajax({ url: 'http://localhost', data: { score : $("input[name='score']").val() }, dataType: "jsonp", jsonpCallback: "_testcb", cache: false, timeout: 5000, success: function(data) { $("#test").append(data); }, error: function(jqXHR, textStatus, errorThrown) { alert('Error connecting to the Node.js server... ' + textStatus + " " + errorThrown); } }); }); }); 

基本上,我想从一个HTML文档中input一个名为'score'的input文本,但是在'var score – req.body.score'处得到错误“Can not read property'score'undefined”。 猜猜我需要初始化/定义'req.body某处,但我不知道如何? 谁能帮我吗?

另外,我发现这个在线初始化/定义'res.body',可能是有用的?

 req.on('response', function (res) { res.body = ""; res.on('data', function (chunk) { res.body += chunk; }); res.on('end', function () { console.log(res.body); }); }); 

谢谢

我不知道一些“中间件”是否提供了req.body ,但是继续往下走:

 var http = require('http'); var express = require('express'); var qs = require('querystring'); console.log('Game server running...'); http.createServer(function (req, res) { console.log('Player submitted high-score:'); var bodyParts = []; req.on("data", function(part) { bodyParts.push(part); }); req.on("end", function() { var body = Buffer.concat(bodyParts).toString("utf8"); var data = qs.parse(data); var score = data.score; console.log(score); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('_testcb(\'"Your high-score has been submitted."\')'); }); }).listen(80); 

request.body属性由bodyParser中间件填充,因此您必须将其包含在node.js应用程序中

 app.use(express.bodyParser()) 

所以

 var http = require('http'); var express = require('express'); var app = express(); console.log('Game server running...'); app.use(express.bodyParser()) console.log('Player submitted high-score:'); app.get('/', function(req, res) { var score = req.body.score; console.log(score); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('_testcb(\'"Your high-score has been submitted."\')'); }); app.listen(80); 

req是请求,包含来自当前请求的数据, res是从服务器发回的响应,因此试图从发送回应的input中获取数据不会工作。