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

丹尼·H

我的变量“ 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');
TJ人群

如果它们依赖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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Program cs 中声明全局变量并在 .NET 6.0 Web Api 的控制器中使用它

如何在Symfony 2中为所有控制器设置全局变量?

如何在angularjs(1x)控制器中全局使用变量?

如何在Web API控制器中全局设置会话变量?

AngularJS如何在控制器中声明私有变量和函数

在angularjs控制器中声明变量

如何在数组控制器中声明项目控制器-ember.js

如何在单个控制器中创建全局变量并在Angularjs的工厂内部调用函数

如何在控制器Laravel中调用变量

如何在控制器中获取通配符路径变量

如何在控制器的模型中获取变量?

如何在JavaScript中访问控制器变量

如何在控制器中测试实例变量?

如何在子控制器中更新父控制器变量

控制器laravel 5.3中的全局变量

Codeigniter控制器中的动态全局变量

Laravel控制器中的全局变量

Laravel 5.2控制器中的全局变量

如何从类内部更改全局变量并在不同的视图控制器中访问?

如何设置可以在Rails的控制器和模型中访问的“全局”变量

在Codeigniter控制器中声明私有变量

如何在laravel控制器中全局定义多维数组?

从第二个视图控制器访问全局变量时的预期声明

如何在Stimulus JS控制器中声明const字符串?

如何在Laravel 4中为命名路由声明控制器方法?

如何在控制器中一次声明变量,并将其应用于控制器的所有方法

在所有视图和控制器中可用的Config文件夹中的Laravel中声明全局可访问变量

如何在 SwiftUI 中声明“全局@State 变量”?

如何在React中声明全局变量?