如何在 next.js 应用程序中要求和使用 ES6 class?

How to require and use a ES6 class in a next.js application?

我正在开发 next.js 应用程序,我想将与数据库交互的代码移出 api。我创建了一个 class 作为我的经理:

class UserManager
{

    async findUser(email) {
        //some code
        return user;
    }

    async updateUser(user, reqBody) {
        //some other code
        //return something
    }
}
module.exports = UserManager;

我正在尝试使用 api

中的这个 class
const UserManager = require('../../manager/UserManager');


export default async (req, res) => {
    const email = session.user.email;
    let UserManager = new UserManager();
    const user = await UserManager.findUser(email);
}

我收到了这个错误

| ReferenceError: Cannot access 'UserManager1' before initialization
|   10 |     }
|   11 |     const email = session.user.email;
| > 12 |     let UserManager = new UserManager();
|      |                      ^

这种方法有什么问题?我是否以错误的方式要求 class?

这与模块或requre无关。只是变量和范围。

您有两个名为 UserManager.

的变量

一个是 const 并且作用域为模块并且包含 class.

另一个是 let 作用域为导出的箭头函数;它 shadows const.

您正在尝试读取函数内部的 const,但它被 let 遮蔽了。由于您尝试先读取 const (调用一个函数来获取要分配给 let 的值),您会收到一个错误,因为规则JS 说您正在阅读 let(不是您想要的 const)。

更改用于 let 的变量名称。

Idiomatic JS 为 classes 和构造函数保留以大写字母开头的变量名称(并且 React.js 将组件添加到该列表)。 let 变量被分配给 class 的 实例 ,而不是 class 本身,因此它的名称不应以大写字母开头.

let userManager = new UserManager();

我建议使用 eslint no-shadow rule 来提醒您出现此错误。


旁白:您的 class 似乎没有跟踪任何内部状态,它只是用于创建一个对象以将一些方法组合在一起(none 其中甚至使用 this).作为普通对象而不是 class.

可能会更好