将数据从服务器(nodejs)发送到客户端(ajax请求)

时间:2013-08-12 12:16:54

标签: ajax node.js express mongoose

如何使用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

1 个答案:

答案 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对象。因此,无需stringifyparse数据。