如何在 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.
可能会更好
我正在开发 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
中的这个 classconst 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.