2017-10-04 20 views
2

私は私のコントローラ(NodeJS/Express)にあるすべての10のルートで同じ定義を持つ変数 'startDate'と 'endDate'を持っています。コントローラでこれらの変数をグローバルに宣言するにはどうすればよいですか?

これらをグローバルに宣言することで、各ルートで何度も宣言する必要はありません。

私の現在のコードでは、startDateがリクエストの一部としてページから送信されたかどうかをチェックし、そうでなければ、momentJSを使用してstartDateを設定します。

現在のところ、変数をルートの上に置くだけでは、.reqが定義されていないというエラーが表示されます。

私はかなりJSに新しいですので、どんな助けにも感謝します。彼らはreqに依存している場合は、あなたのアカウントに、個々の要求を取らなければならないので、彼らは一度だけ

乾杯

var express = require('express'); 
var router = express.Router(); 
var ccmQueuePerformance = require('../models/ccmQueuePerformance'); 
var moment = require('moment'); 


// Get hourly data by queue 

router.get('/callsOfferedByQueue', async function(req, res, next) { 
    try { 

     // Declare startDate and endDate 

    var startDate = moment().startOf('month').format('YYYY-MM-DD'); 
    if(req.query.startDate) startDate = moment(req.query.startDate, 'YYYY-MM-DD').startOf('day'); 
    var endDate = moment().endOf('month').format('YYYY-MM-DD'); 
    if(req.query.endDate) endDate = moment(req.query.endDate, 'YYYY-MM-DD').startOf('day'); 

答えて

1

を定義することはできません。論理が経路間で同一である場合、通常の解決策は、その論理を関数に分離して呼び出すことです。例えば:

function getDates(req) { 
    var startDate = moment().startOf('month').format('YYYY-MM-DD'); 
    if(req.query.startDate) startDate = moment(req.query.startDate, 'YYYY-MM-DD').startOf('day'); 
    var endDate = moment().endOf('month').format('YYYY-MM-DD'); 
    if(req.query.endDate) endDate = moment(req.query.endDate, 'YYYY-MM-DD').startOf('day'); 
    return { startDate, endDate }; 
} 

またはロジックを少しリワーク:

function getDates(req) { 
    return { 
     startDate: req.query.startDate 
        ? moment(req.query.startDate, 'YYYY-MM-DD').startOf('day') 
        : moment().startOf('month').format('YYYY-MM-DD'), 
     endDate: req.query.endDate 
        ? moment(req.query.endDate, 'YYYY-MM-DD').startOf('day') 
        : moment().endOf('month').format('YYYY-MM-DD') 
    }; 
} 

その後、あなたのルートで:これはあなたが漠然とアップにを使用していると仮定されていることを

var {startDate, endDate} = getDates(req); 

注意-date Node:簡潔なオブジェクトプロパティと構造の割り当てをサポートしています。

関連する問題