我正在尝试使用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'}) })
})
连接正常。在客户端我收到回复。因此OnSucces方法中的console.log(responseText)
正在打印正确的值。
但在服务器端,console.log(req.body)
为undefined
。
我有点怀疑。 mootools将javascript对象转换为json字符串吗?是否有必要转换de object?通过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'}) })
})
答案 0 :(得分: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)