我如何在我的控制器中全局声明这些variables?

我有variables'startDate'和'endDate',它们在我的控制器(NodeJS / Express)中的所有10条path中具有相同的定义。

我怎样才能在全球范围内声明这些内容,以便在每条路线上不必多次声明?

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

目前,如果我只是把variables放在路由上面,我会得到一个错误,说明.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'); 

       

网上收集的解决方案 "我如何在我的控制器中全局声明这些variables?"

如果他们依赖于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); 

请注意,这是假设您正在使用模糊的最新的节点,它支持简洁的对象属性和解构赋值。