首页 > 解决方案 > 在ExpressJS自己的文件中提取方法:不能在模块外使用import语句

问题描述

我今天用 ExpressJS 制作了我的第一个应用程序。

问题是index.js太大(600 行),我想将我的代码组织成不同的文件。

最简单的部分是静态日期函数。我有 5 个函数,我想将它们放入一个单独的文件中:

dates.js

import moment from "moment";

module.exports = {
    getNextMonday: (firstDate) => {
        let firstMonday = firstDate.add(1, "day").startOf('isoWeek');
        if (!firstDate.isSame(firstMonday)) {
            firstMonday = firstMonday.add(7, "day");
        }
        return firstMonday;
    },

// Get the days in a array
    getDays: (conso) => {
        let days = conso.map(value => moment(value['date'], "DD-MM-YYYY HH:mm").format("DD"));
        return days.filter(function (elem, pos) {
            return days.indexOf(elem) === pos;
        });
    },

// Get the days in a array
    getDaysWithHours: (conso) => {
        let days = conso.map(value => value['date']);
        // console.log(days);

        return days.filter(function (elem, pos) {
            return days.indexOf(elem) === pos;
        });
    },

    getHourlyData: (data, monday) => {
        return data.filter(item => {
            const date = moment(item.date, "DD-MM-YYYY HH:mm");
            // if moment(item.date, "DD-MM-YYYY HH:mm") + 7
            if (isSameWeek(monday, date)) return item;
        });
    },

    isSameWeek: (firstDay, secondDay) => {
        let firstMoment = moment(firstDay);
        let secondMoment = moment(secondDay);
        return firstMoment.startOf('isoWeek').isSame(secondMoment.startOf('isoWeek'));
    }
};

然后在 中index.js,我尝试使用它们:

let date = require('./dates.js');
...
const monday = date.getNextMonday(firstDay);

但我收到一个错误:

import moment from "moment";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Module._compile (internal/modules/cjs/loader.js:891:18)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Module.require (internal/modules/cjs/loader.js:848:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/home/julien/Code/customer_recap/index.js:13:12)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
[nodemon] app crashed - waiting for file changes before starting...

看来我无法将 moment lib 导入我的新本地模块。

为什么 ?我应该怎么做?

标签: node.jsexpressrefactoring

解决方案


推荐阅读