Получить JSON из структуры Solidity с помощью функции get [Express] - PullRequest
0 голосов
/ 20 мая 2019

Мне нужен JSON, как это:

{meteo: 'Fluorine', commento: 'F'}

, но когда я использую функцию get, я получаю это:

[ '1meteo', '1commento', meteo: '1meteo', commento: '1commento' ]

Я использую Express для бэкэнда, это мойкод:

app.get('/getallgiornale', async function (req, res) {

  // Get the contract instance.
  const networkId = await web3.eth.net.getId();
  const deployedNetwork = Giornaledeilavori.networks[networkId];
  const instance = new web3.eth.Contract( Giornaledeilavori.abi, deployedNetwork && deployedNetwork.address );

  // getAll
  const response = await instance.methods.getAll().call();
  res.send(response);

});

и в Solidity:

contract Giornaledeilavori {
struct Dati{
string meteo;
string commento;
}
Dati[] public dati;

//getAll function:
function getAll() public returns (Dati[] memory){
  Dati[] memory d = dati;
  return d;
}

//set function:
  function setDato(string memory _meteo, string memory _commento) public  {
    Dati memory newDati = Dati({
    meteo: _meteo,
    commento: _commento
  });
    dati.push(newDati);
}

функция набора в Express выглядит следующим образом:


app.get('/setgiornale', async function (req, res) {
  var accounts = await web3.eth.getAccounts();
  // Get the contract instance.
  const networkId = await web3.eth.net.getId();
  const deployedNetwork = Giornaledeilavori.networks[networkId];
  const instance = new web3.eth.Contract( Giornaledeilavori.abi, deployedNetwork && deployedNetwork.address );

  // setDati
  instance.methods.setDato('1meteo','1commento').send({
    from: accounts[0],
    gas:"4500000",
    privateFor:['ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc=']
  },(error, transactionHash) => {
    if(error) {
      console.log(error);
      res.send(500);
    } else {
      res.send(transactionHash);
    }
  });
})

В функции набора я пытался использовать jsonвместо отправки, но это не сработало.Я использовал json stringify, но он не работал.

Как я могу получить json?

Спасибо за ответы.

1 Ответ

0 голосов
/ 20 мая 2019

Вы должны вернуть формат json на вашем сервере узлов примерно так:

return res.json({ questions: questions });

Также вы получили ответ массива из-за этой строки

dati.push(newDati);
...