2014-12-03 87 views
0

我有2个js文件相互对应,一个用于服务器,一个用于客户端。 客户端应该使用名为“/ postGetInc”的发布请求,向服务器发送一个数字,服务器增加它并返回结果。每当我尝试将特定号码发布到服务器时,它都会将其视为空对象。 我知道输入也应该是一个对象,但是当我使用{“number”:number}创建对象时,它仍然不能识别数字值。

所以这是我的server.js

app.post("/getInc", function (req, res) { 
console.log("req: " + req); 
console.log("req.number: " + req.number); 

req.number++; 
res.send(req.number); 
}); 

小码,这是我使用后的功能,在client.js

function postGetInc(number){ 
var res = "no response"; 
toSend = { "number": number }; 
$.post("/getInc", toSend, function (response) { 
    console.log(response); 
    res = response; 
}); 
return res; 
//this should return number+1 
//in case of a failt, it returns "no response" 
} 

,每当我跑postGetInc( 10)我得到

"no response" 

印在我的控制台上。

我的服务器控制台上,我得到:

req: [object Object] 
req.number: undefined 

如果我更换{“数字”:数}只数和req.number用数字,我收到我的印控制台上相同的消息。

感谢您的阅读,我很想听听我做错了什么,请帮助我。

回答

0

要访问服务器端的参数,你必须使用req.body

req.body.number 

我推荐阅读documentation。请注意,在默认情况下没有定义,你必须先注册身体解析器:

var bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 

另一个问题是,你不能从postGetInc返回res。请参阅How to return the response from an Ajax call?的原因和解决方案。

+0

所以如果我弄清楚了,req代表从客户端发送到服务器的所有信息,而不仅仅是一个对象?所以也ip地址等 – Gaargod 2014-12-03 17:36:38

+0

是的。一个HTTP请求也包含很多元数据。 https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_message – 2014-12-03 17:37:51

+0

我改变了每个“req.number”与“req.body.number” 这给了我一堆错误,它无法找到数字值未定义。 如果我添加了你提供的两行文件,并将它们放在我的server.js文件的开头,我得到一个错误,说明它在启动服务器时找不到该模块。 我在哪里可以得到这个包,如果我想要相同的结果,是否需要包含这个包? 感谢您的回复 – Gaargod 2014-12-03 17:53:10