我如何在我的控制器中全局声明这些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');
如果他们依赖于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);
请注意,这是假设您正在使用模糊的最新的节点,它支持简洁的对象属性和解构赋值。