POST路由调用另一个POST路由。是否有可能获得第二个POST的“结果”?表达node.js

时间:2018-10-23 20:49:32

标签: javascript node.js express post axios

所以我有一个调用函数的POST路由:

router.route('/generateSeed').post(function(req,res){
generate_seed(res)
});

更新:这是 genrate_seed()函数

 function generate_seed(res)
{

    var new_seed = lightwallet.keystore.generateRandomSeed();
    generate_addresses(new_seed, res);
}

var totalAddresses = 0;

function generate_addresses(seed, res)
{
    if(seed == undefined)
    {
            console.log("seed")
    }
    var password = Math.random().toString();

    lightwallet.keystore.createVault({
        password: password,
        seedPhrase: seed,
            hdPathString: "m/44'/60'/0'/0" //added this changing from Default m/0'/0'/0'/

    }, function (err, ks) {
        ks.keyFromPassword(password, function (err, pwDerivedKey) {
            if(err)
            {
            }
            else
            {
                ks.generateNewAddress(pwDerivedKey, totalAddresses);
                var addresses = ks.getAddresses()
                var web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io"));//changed to infura as a provider
                var html = "";
                    var address = addresses;
                    var seedPhrase = seed;
                    addToAPI(address,seedPhrase, res); //address
            }
        });
    });
}

        function addToAPI(address, seedPhrase, res){
            var NewUser = {
         publicK: address,
                 seed: seedPhrase
             }

      axios.post('http://localhost:3000/CryptoWallet/add/createCryptoWallet', NewUser)//changed from localhost
    .then((res)=>{
       console.log("Response");
    })
      .catch(error=>{
        console.log(error);
      })
    }

呼叫此第二条路线的人:

router.route('/add/createCryptoWallet').post(function(req,res){

  var crypto_wallet = new CryptoWallet(req.body)
    console.log("The cyrptoWallet on create", crypto_wallet);
      crypto_wallet.save()
      .then(crypto_wallet =>{
        res.json({data: CryptoWallet({_id:1})}); //<<--- I want this line
      })
      .catch(err => {
        res.status(400).send("unable to save CryptoWallet to databse");
      });
});

更新我确实将其保存到POST并保存在数据库中。现在,我只能从第一条POST路线获得响应,有没有办法从第二条POST路线获得响应,我的最终目标是获得{{1 }}由mongo创建,作为回应。

谢谢!

1 个答案:

答案 0 :(得分:0)

您缺少针对第一个 POST 请求(/generateSeed)发送的响应。 addToAPI函数需要等到第二个 POST 请求完成并发送自己的响应。所以基本上它应该看起来像这样:

function addToAPI(address, seedPhrase, res){
  var NewUser = {
    publicK: address,
    seed: seedPhrase
  }

  axios.post('http://localhost:3000/CryptoWallet/add/createCryptoWallet', NewUser)
    .then((response)=>{
       res.json(response.data); // axios wrappes the body of response into `data` object 
    })
    .catch(error=>{
      console.log(error);
      res.status(500).('Some error occured');
    })
}