¿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
SourceSi 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.