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

Sam*_*vic 3 ajax mongoose node.js express

如何使用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);
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

然后处理请求

服务器

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);
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

但我需要使用res.redirect发送新创建的stuff._id.问题是我不想将它作为res.redirect(301,'/'+ req.body.tid +'/'+ stuff._id)发送,因为我必须做一个全新的路由器,而不是看似灵活.此外,当我执行此请求时,网页不会重新加载,这就像我想要的那样.

我尝试使用res.send(stuff._id),但我只能做一次(因为连接似乎在它之后关闭).我正在使用以下库:mongoose,jquery,express

Sal*_*man 7

如果我理解正确,您希望使用您在请求中获得的原始ID以及新生成的ID回复客户端.我不明白的是,redirect如果你不想重页加载,你为什么要使用?

你可以简单地说,

var obj = {
    tid: req.body.tid,
    _id: stuff._id
};

res.send(JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)

并且,ajax成功处理程序将是

success: function(data) {
    var obj = JSON.parse(data);
    var id = obj._id;
    doStuff(id);
}
Run Code Online (Sandbox Code Playgroud)

我想这就是你想要的.

编辑:

正如deitch所指出的,express它本身将对象转换为JSON字符串,并Content-Type为JQuery 添加一个标头,以正确识别并将字符串解析为JSON对象.所以不需要stringifyparse数据.