如何在其他JS文件中使用exports对象?调用静态方法报错求助
解决 "(intermediate value).select is not a function" 错误
你的问题出在静态方法的调用方式和异步函数的处理上,我来一步步帮你修正:
问题1:静态方法不能通过实例调用
你在User类里定义的select是static静态方法,这类方法属于类本身,而不是类的实例对象。所以你用new User().select()去调用是错误的,应该直接通过User.select()来调用。
问题2:异步函数需要正确处理异步流程
select是async函数,它返回的是一个Promise对象。如果直接把它赋值给userList然后res.send,你发送的会是一个未解析的Promise,而且还会因为异步未完成导致数据不对。所以路由处理函数需要改成async,并用await等待select方法执行完成。
修改后的完整代码
1. 确保正确导入User类(usersApi文件中)
首先要确认你已经正确导入了User类:
const { User } = require('./user.js'); // 根据实际文件路径调整
2. 修正路由处理代码
router.get('/', async (req, res) => { // 添加async关键字 try { const userList = await User.select(); // 直接调用类的静态方法,并用await等待结果 res.send(userList); } catch (error) { // 别忘了处理错误,避免服务器崩溃 res.status(500).send({ error: '获取用户列表失败', details: error.message }); } });
为什么原来的代码会报错?
当你执行new User().select()时,因为select是静态方法,实例对象上并没有这个方法,所以JS会抛出select is not a function的错误。而改成User.select()后,才是正确调用静态方法的方式。同时加上async/await,才能确保你拿到的是select方法返回的实际用户数据,而不是Promise对象。
内容的提问来源于stack exchange,提问作者Md. Maidul Islam
相关产品推荐
相关产品推荐

