【问题标题】:How do I declare these variables globally in my controller?如何在我的控制器中全局声明这些变量?
【发布时间】:2018-03-15 19:08:04
【问题描述】:

我有变量“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');

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      相关资源
      最近更新 更多