如何使用nodejs将数据从服务器发送到客户端?
所以基本上我通过点击按钮
来调用此函数的javascript
function createStuff(tid) {
$.ajax({
type: "POST",
url: '/create/',
data: {tid: tid}
success: function(id) {
doStuff(id);
},
error: function(jqXHR, textstatus, errorThrown) {
alert('text status ' + textstatus + ', err ' + errorThrown);
}
});
};
然后处理请求
服务器
exports.create = function(req, res) {
new Stuff({
content: "random stuff"
}).save(function(err, stuff) {
Otherstuff.update({_id: req.body.tid}, {$push: {stuffes: stuff}}, {upsert: true}, function(err, mvar) {
res.redirect(301, '/' + req.body.tid);
});
});
};
但我需要使用res.redirect发送新创建的stuff._id。问题是我不想将它作为res.redirect(301,'/'+ req.body.tid +'/'+ stuff._id)发送,因为我必须做一个全新的路由器,而不是看似灵活。此外,当我执行此请求时,网页不会重新加载,这就像我想要的那样。
我尝试过使用res.send(stuff._id),但我只能做一次(因为连接似乎在它之后关闭)。我正在使用以下库:mongoose,jquery,express
答案 0 :(得分:7)
如果我理解正确,您希望使用您在请求中获得的原始ID以及新生成的ID回复客户端。
我不明白的是,如果你不想重页加载,你为什么要使用redirect
?
你可以简单地,
var obj = {
tid: req.body.tid,
_id: stuff._id
};
res.send(JSON.stringify(obj));
而且,ajax
成功处理程序将是
success: function(data) {
var obj = JSON.parse(data);
var id = obj._id;
doStuff(id);
}
我想这就是你想要的。
修改强>
正如deitch指出的,express
本身将对象转换为JSON字符串,并为JQuery添加Content-Type
标头,以正确识别并将字符串解析为JSON对象。因此,无需stringify
和parse
数据。