javascript - 如何在我的 Controller 中全局声明这些变量?

标签 javascript node.js express

我有变量“startDate”和“endDate”,它们在我的 Controller (NodeJS/Express) 中的所有 10 条路由中具有相同的定义。

我如何在全局范围内声明它们,这样它们就不必在每条 route 多次声明?

我当前的代码检查 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')
    };
}

然后在你的 route :

var {startDate, endDate} = getDates(req);

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

关于javascript - 如何在我的 Controller 中全局声明这些变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46564015/

相关文章:

javascript - 在灯箱或页面加载时打开 YouTube 视频

javascript - HTML5 Gallery 删除下载按钮和播放按钮覆盖?

node.js - 批量插入时 NOT NULL 约束失败

javascript - PassportJS/Express 内部出错后如何重定向?

node.js - Rest Api 最佳实践 - 将日期作为查询参数传递

node.js - 捕获所有路线,除了/登录

javascript - jQuery 不能在 JS Bin 之外工作

javascript - 正文解析器已弃用未定义扩展 : provide extended option

javascript - 如何像使用 PHP 一样在 HTML 页面中运行 Node.js 脚本?

express - 中间件的执行顺序是怎样的?