2017-07-04 24 views
1

以下のように、私のserver.jsファイルには、/ POST Infoリクエストがフォームのsubmittalで呼び出されています。Axios内でのリクエスト/ ExpressでのPOSTリクエスト

私はapp.postとexpressルートの違いについて読んで混乱し始めました。とにかくルートを使用すると、ここで自分のコードに役立つでしょう。

/POST Info内に2つの異なるAPIへの2つのアクソスのリクエストがあります。コードを別の場所に移動してクリーナーにするのが賢明でしょう。

ここでルートの仕組みが分かっていれば、私にはどんなメリットがありますか?ここでその違いを説明できるとすれば素晴らしいでしょう。

app.post('/Info', function (req, res) { 
    var State = req.body.State; 
    var income = Number(req.body.income); 
    var zip = req.body.ZIP; 
    axios.post('https://taxee.io/api/v2/calculate/2017', { 
     //data sent to Taxee.io 
     "exemptions": 1 
     , "filing_status": "single" 
     , "pay_periods": 1 
     , "pay_rate": income || 100000 
     , "state": State || "NY" 
    }, { 
     headers: { 
      'Authorization': "Bearer <API_KEY>" 
      //headers 
     } 
    }).then(function (response) { 
     var obj = { 
     income: '$' + income 
     , fica: response.data.annual.fica.amount 
     , federal: response.data.annual.federal.amount 
     , residence: State + ", " + zip 
     , state: response.data.annual.state.amount 
     } 
     axios.get("https://www.quandl.com/api/v3/datasets/ZILL/Z" + zip + "_RMP.json?api_key=<API_KEY>").then(function (response) { 
     var monthRent = response.data.dataset.data[0][1] 
     obj.rent = monthRent 
     obj.yearlyRent = Number(monthRent) * 12; 
     }).then(function (response) { 
     res.send(obj); 
     }); 
    }).catch(function (error) { 
     alert('error'); 
    }); 
} 

答えて

1

Expressアプリケーションにルートを定義する2つの方法があります。

は、Expressアプリケーションを使用してください(app)直接オブジェクト:

const express = require('express') 
const app = express() 

app.post(...) 
app.get(...) 
app.put(...) 
// and so on 

またはrouterオブジェクトを使用します。

const express = require('express') 
const app = express() 
const router = express.Router() 

router.post(...) 
router.get(...) 
router.put(...) 
// and so on 

app.use(router) 
は、

私の推測では、あなたはtについて読んでいるということです後者のコードはrouterオブジェクトです。 Express 'Routerオブジェクトを使用すると、実際には、より多くの懸念事項を読み込めるようにコードをきれいにすることができます。

独自のAPIから外部APIを呼び出すときに問題はありません。たとえば、私のプロジェクトでは、this行のGoogleカレンダーAPIを呼び出します。私の唯一の違いは、あなたが標準のHTTPリクエストを使用している間にGoogle APIs Node.js Clientを使用したことです。私は確かにhereのようにHTTPリクエストを使用することができました。

コードは問題ありませんが、改善することができます。たとえば、代わりの:

axios.post('...', { 
    exemptions: 1, 
    filing_status: 'single', 
    pay_periods: 1, 
    pay_rate: income || 100000, 
    state: State || 'NY' 
}) 

あなたはオプションオブジェクトを準備するヘルパー関数呼び出すことができます。そして、そのようにそれを呼び出す

function prepareOptions (state = 'NY', income = 100000) { 
    return { 
    exemptions: 1, 
    filing_status: 'single', 
    pay_periods: 1, 
    pay_rate: income, 
    state: State 
    } 
} 

を:

axios.post('...', prepareOptions(State, income)) 

これがためには、より読みやすくなりますコード。

最後に、サーバー側でアキシャルを使用する理由はありません。単にノードのHTTP moduleに組み込まれて使用してください。

+0

http.get({ ホスト名: 'localhostの' ポート:80、 パス: '/'、 剤:偽//この1つのだけ要求 ための新しいエージェントを作成}、(RES)=> { //応答のあるものを行う });代理人がいないこのような何か? – Aaron

1
app.post('/Info', function (req, res) { 

     var uData ={ 
      state: req.body.State, 
      income : Number(req.body.income), 
      zip: req.body.ZIP 
     }; 

     taxee(uData).then(function(data){ 

      return rent(data) ; 
     }).then(function(fullData){ 

      res.send(fullData); 
     }).catch(function (error) { 
     res.render('error'); 
    }); 
function taxee(data) { 
    return new Promise((resolve, reject) => { 

     var income = data.income; 
     var state = data.state; 
     var zip = data.zip; 
     axios.post('https://taxee.io/api/v2/calculate/2017', { 
      //data sent to Taxee.io 
      "exemptions": 1 
      , "filing_status": "single" 
      , "pay_periods": 1 
      , "pay_rate": income || 100000 
      , "state": state || "NY" 
     , }, header).then(function (response) { 
      var taxData = { 
       income: '$' + income 
       , fica: response.data.annual.fica.amount 
       , federal: response.data.annual.federal.amount 
       , stateTax: response.data.annual.state.amount 
       , state 
       , zip: zip 
      } 
      resolve(taxData); 
     }).catch(function (error) { 
      console.log('break'); 
      resolve(error); 
     }); 
    }); 
}; 

function rent(data) { 
    return new Promise((resolve, reject) => { 
     axios.get("https://www.quandl.com/api/v3/datasets/ZILL/Z" + data.zip + "_RMP.json?api_key=d7xQahcKCtWUC4CM1LVd").then(function (response) { 
      console.log(response.status, ' status'); 
      var monthRent = response.data.dataset.data[0][1]; 
      data.rent = monthRent 
      data.yearlyRent = Number(monthRent) * 12; 
      return data; 
     }).then(function (response) { 
      resolve(data); 
     }).catch(function (error) { 
      reject(error); 
     }); 
    }); 
} 
module.exports = { 
    taxee 
    , rent 
};  

上記のコードをきちんとした約束の方法に入れてください。本当にそれがうまくいかに幸せ!

関連する問題