Enviar datos desde el servidor (nodejs) al cliente (solicitud ajax)

2022-08-06 21:39:37

¿Cómo envío datos del servidor al cliente usando nodejs?

Así que básicamente llamo a esta función haciendo clic en un botón

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);
        }
    });
};

Esto luego maneja la solicitud

servidor

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);
        });
    });
};

Pero necesito enviar el nuevo archivo stuff._id con res.redirect. La cuestión es que no quiero enviarlo como res.redirect(301, '/' + req.body.tid + '/' + stuff._id) porque tendría que hacer un enrutador completamente nuevo que no parecer flexible. Además, cuando realizo esta solicitud, la página web no se vuelve a cargar, que es justo lo que quiero.

Intenté usar res.send(stuff._id), pero solo pude hacerlo una vez (porque la conexión se cierra después de lo que parece). Estoy usando las siguientes bibliotecas: mongoose, jquery, express

- Samir Alajmovic

Source
zh
Responder


3
  • Si lo entendí correctamente, desea responder al cliente con la identificación original que obtuvo en la solicitud, así como la identificación recién generada. Lo que no entendí es, ¿por qué estás usando redirect si no quieres recargar ninguna página?

    Podrías simplemente,

    var obj = {
        tid: req.body.tid,
        _id: stuff._id
    };
    
    res.send(JSON.stringify(obj));
    

    Y, el controlador de éxito ajax sería

    success: function(data) {
        var obj = JSON.parse(data);
        var id = obj._id;
        doStuff(id);
    }
    

    Supongo que esto es lo que quieres.

    Editar:

    Como señaló deitch, express mismo convierte el objeto en una cadena JSON y agrega un encabezado Content-Type para que JQuery identifique y analice correctamente la cadena en JSON objeto. Así que no hay necesidad de stringify y parse los datos.