Para enviar um objeto para o servidor, usei o trecho abaixo:
save(negociacao,cb) {
let xhr = new XMLHttpRequest();
xhr.open("POST", "/negociacoes", true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.onreadystatechange = () => {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
cb(JSON.parse(xhr.responseText));
} else {
console.log(xhr.responseText);
cb("Não foi possível salvar a Negociação!", null);
}
}
};
xhr.send(JSON.stringify(negociacao));
}
Porém o objeto vai assim para o servidor:
{"_data":"1990-12-19T03:00:00.000Z","_quantidade":"1","_valor":"11"}
o "_" antes de cada atributo foi inserido na classe, para dizer que não deve ser acessado de fora.
class Negociacao {
constructor(data, quantidade, valor) {
this._data = new Date(data.getTime());
this._quantidade = quantidade;
this._valor = valor;
Object.freeze(this);
}
getData() {
return new Date(this._data.getTime());
}
getQuantidade() {
return this._quantidade;
}
getValor() {
return this._valor;
}
getVolume() {
return this._quantidade * this._valor;
}
}
Mas esta convenção impede que o servidor funcione.
Para tal, tive que fazer a seguinte adequação, no arquivo server/app/api/index.js
api.cadastraNegociacao = function(req, res) {
console.log(req.body);
req.body._data = new Date(req.body._data.replace(/-/g,'/'));
negociacoes.push(req.body);
res.status(200).json("Negociação recebida");
};
req.body._data = new Date(req.body._data.replace(/-/g,'/'));
Como poderíamos resolver isso?
Pois se usarmos outro backend (Java + Jackson Mapper), que não pode ser alterado, pode inviabilizar a integração, fazendo com que seja necessário abrir mão da convenção e retirar o "_".