我的变量“ 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);
请注意,这是假设您使用的是模糊的最新节点,该节点支持简洁的对象属性和解构分配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句