0

我正在尝试使用 mootools 在节点 0.10.3 上建立 AJAX 连接。我的代码是:

客户

var ajax = new Request({
url: '/register',
method: 'post',
onSuccess: function(responseText){
    console.log(responseText);
}
 })

 var json = {data:'data'};
 ajax.send(JSON.stringify(json));
 //ajax.send(json);

服务器

var express = require('express');
var app = express();

app.use(express.static(__dirname + '/public'));

app.listen(1344);

app.post('/register', function(req,res){
     //Auth.register()
     console.log(req.body);
     res.contentType('json');
     res.send({ some: JSON.stringify({response:'json'}) })
})

连接正常。在客户端上,我得到了响应。所以console.log(responseText)OnSucces 方法内部正在打印正确的值。

但在服务器端,console.log(req.body)undefined.

我在这里有几个疑问。mootools 是否将 javascript 对象转换为 json 字符串?是否有必要转换对象?通过 AJAX 向节点发送信息的正确方法是什么?这ajax.send(JSON.stringify(json));行吗?或者是这样的ajax.send(json);?

我是否需要将标头指定为 json?

除了解决特定问题之外,最好有一些文章,或者一些反馈来明确阐明围绕 node.js 的这些概念。

编辑

对于那些面临类似问题的人,我将发布正确的代码。Noah 对解析器的看法是正确的,但还有另一个细节,解析器期待关键数据。幸运的是,我以数据为例!

客户

var ajax = new Request({
   url: '/register',
   method: 'post',
   onSuccess: function(responseText){
       console.log(responseText); //Logs "some": "{\"response\":\"json\"}"
   }
})
ajax.send({data:{ok:'OK'}});

服务器

var express = require('express');
var app = express();

app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.listen(1344);

app.post('/register', function(req,res){
    console.log(req.body); //logs {ok:'OK'}
    res.contentType('json');
    res.send({ some: JSON.stringify({response:'json'}) })
})
4

1 回答 1

3

在您发布的代码中,您缺少 bodyParser 中间件app.use(express.bodyParser()

添加 bodyParser 中间件后,您将能够访问req.body

var express = require('express');
var app = express();
app.use(express.bodyParser()
app.use(express.static(__dirname + '/public'));
app.use(app.router)
于 2013-04-14T15:30:51.490 回答