我正在使用存储库模式,nodejs,graphql和sequelize编写一个简单的应用程序。首先这里是我的基地仓库:ES6:将类作为模块使用
import db from '../models';
export default class AbstractRepository {
constructor (model, include) {
if (new.target === AbstractRepository) {
throw new TypeError('Cannot construct AbstractRepository instances directly.');
}
this.model = model;
this.include = include;
}
static findAll() {
return db[this.model].findAll({ include: this.include });
}
}
这里是继承它的存储库:
import db from '../models';
import AbstractRepository from './AbstractRepository';
class UserRepository extends AbstractRepository {
constructor() {
super('User', [db.Clickwrap]);
}
}
export default new UserRepository();
最后,这里是使用UserRespository(有更多的这个文件,但是这是最重要的部分):
import UserRepository from '../../repositories/UserRepository';
const resolvers = {
Query: {
users (root, args, context) {
return UserRepository.findAll();
},
},
};
当我运行在graphiql这样一个简单的graphql查询:
{
users {
id
}
}
我得到这个错误:
_UserRepository2.default.findAll is not a function
不知道什么,我缺少的是造成这一点。
编辑
所以它不再出口的情况下我已经更新了我的代码。其他一切都保持不变。这是我的新UserRepository文件:
import db from '../models';
import AbstractRepository from './AbstractRepository';
class UserRepository extends AbstractRepository {
constructor() {
super('User', [db.Clickwrap]);
}
}
export default UserRepository;
现在,我得到这个错误:
Cannot read property 'findAll' of undefined
你为什么让'findAll'静态?这就是原因。 – loganfsmyth
[永远不会'导出'一个类实例!](http://stackoverflow.com/a/39079929/1048572)改为导出类本身。 – Bergi
@Bergi永远不要说永远。如果需要单身人士(在本例中不是这样),默认导出很好。这并不意味着一个类不应该被导出为命名导出,至少对于测试来说。 – estus