/ / Accediendo a String en el servidor Node.js desde Ajax Post Request - javascript, node.js, ajax, express

Acceso a String en el servidor Node.js desde Ajax Post Request - javascript, node.js, ajax, express

Este es mi primer proyecto que trabaja con ajax y node.js y hasta ahora todas mis solicitudes POST se han realizado a través de envíos de formularios.

Ahora estoy tratando de usar $.ajax para enviar un POST y pase la cadena "cocktailid" para el server.js para usar después de un div click().

Me preguntaba cuál sería la forma más fácil de lograr esto.

Código Ajax

$(".col-sm").click(function(){
//Append to console a log that cocktail div has been clicked.
console.log("Cocktail Clicked.");
console.log(this);

//Create variable to hold id of cocktail div clicked
var cocktailid = $(this).attr("id");
cocktailid = cocktailid.replace(/s+/g, "_");
cocktailid = cocktailid.replace(/"/g, "");
alert(cocktailid);

$.ajax({
type: "POST",
url: "/adddrink",
data: { "field1": cocktailid},
dataType: "json",
cache: false,
contentType: "application/json",
success: function(data) {
console.log("success");
console.log(cocktail + "sent.");
console.log(JSON.stringify(data));
}
});
})
};

Server.js

app.post("/adddrink", function(req, res){
console.log(req.body);
});

Intenté enviar los datos en algunos formatos diferentes y tuve diferentes problemas, actualmente mi servidor muestra el siguiente error:

SyntaxError: Unexpected token # in JSON at position 0
at JSON.parse (<anonymous>)
at createStrictSyntaxError (/home/codio/workspace/CocktailMixerGroupRepo/website/node_modules/body-parser/lib/types/json.js:157:10)
at parse (/home/codio/workspace/CocktailMixerGroupRepo/website/node_modules/body-parser/lib/types/json.js:83:15)
at /home/codio/workspace/CocktailMixerGroupRepo/website/node_modules/body-parser/lib/read.js:121:18
at invokeCallback (/home/codio/workspace/CocktailMixerGroupRepo/website/node_modules/raw-body/index.js:224:16)
at done (/home/codio/workspace/CocktailMixerGroupRepo/website/node_modules/raw-body/index.js:213:7)
at IncomingMessage.onEnd (/home/codio/workspace/CocktailMixerGroupRepo/website/node_modules/raw-body/index.js:273:7)
at IncomingMessage.emit (events.js:160:13)
at endReadableNT (_stream_readable.js:1101:12)
at process._tickCallback (internal/process/next_tick.js:152:19)

En este momento solo quiero mostrar que puedo acceder a la cadena en el servidor de nodo.

He intentado buscar una solución y, después de mis intentos, creo que realmente he complicado demasiado lo que estoy tratando de lograr, ¡cualquier ayuda sería muy apreciada!

Respuestas

0 para la respuesta № 1

Tienes que usar: JSON.stringify en data

$.ajax({
type: "POST",
url: "/adddrink",
data: JSON.stringify({
"field1": cocktailid
}),
dataType: "json",
cache: false,
contentType: "application/json",
success: function(data) {}
});

Sin él, la carga útil es field1=yes en lugar de {"field1":"yes"} por eso es que estás recibiendo SyntaxError: Unexpected token # in JSON at position 0 porque no estaba publicando un JSON válido.

Para obtener un error más detallado, puede agregar un middleware de manejo de errores después body-parser para manejar errores JSON.

app.use(bodyParser.json());

app.use((err, req, res, next) => {

// Body parser middleware Error
if(err instanceof SyntaxError) {

// err.body contains the actual body that was posted
// which won"t be a valid JSON.
console.error(`Invalid JSON: ${err.body}`);

return res
.status(400) // Bad request
.send({
message: "Invalid JSON"
});

}

next();
});