Javascript 如何在控制器中全局声明这些变量?

Javascript 如何在控制器中全局声明这些变量?,javascript,node.js,express,Javascript,Node.js,Express,我有变量“startDate”和“endDate”,它们在控制器(NodeJS/Express)中的所有10条路由上都有相同的定义 我如何在全球范围内声明这些内容,以使它们不必在每条路线中多次声明 我当前的代码检查startDate是否已作为页面请求的一部分发送,否则使用momentJS设置startDate 目前,如果我简单地将变量放在路由之上,我会得到一个错误,声明未定义.req 我对JS还比较陌生,所以任何帮助都将不胜感激 干杯 var express = require('express

我有变量“startDate”和“endDate”,它们在控制器(NodeJS/Express)中的所有10条路由上都有相同的定义

我如何在全球范围内声明这些内容,以使它们不必在每条路线中多次声明

我当前的代码检查startDate是否已作为页面请求的一部分发送,否则使用momentJS设置startDate

目前,如果我简单地将变量放在路由之上,我会得到一个错误,声明未定义.req

我对JS还比较陌生,所以任何帮助都将不胜感激

干杯

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');

如果它们依赖于
req
,则不能只定义一次,因为您必须考虑单个请求;但是,如果路由之间的逻辑相同,通常的解决方案是将该逻辑隔离到一个函数中并调用它。例如:

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);
请注意,这是假设您使用的是一个模糊的最新节点,它支持简洁的对象属性和解构赋值