我正在使用阿波罗服务器,typeorm,bcrypt和下面的打字机进行打字。当运行突变查询时,它会抛出错误“无法为非空字段返回null”。但是它使用哈希密码将数据保存到数据库中(我也可以通过使用console.log来确定这一点);只有突变查询在浏览器中抛出错误。
这是变异解析器:
@Mutation(returns => Users)
create(@Arg("newuser") newuser: UserInput): Promise<Users> | any {
bcrypt.hash(newuser.loginpassword, 12)
.then( hash => {
const new_user = this.usersRepository.create(newuser);
new_user.loginpassword = hash;
return this.usersRepository.save(new_user);
});
}同样,当bcrypt相关内容被注释掉时,如下面所示,不返回错误(当然,密码没有散列)。
@Mutation(returns => Users)
create(@Arg("newuser") newuser: UserInput): Promise<Users> | any {
// bcrypt.hash(newuser.loginpassword, 12)
// .then( hash => {
const new_user = this.usersRepository.create(newuser);
//new_user.loginpassword = hash;
return this.usersRepository.save(new_user);
//});
}在这两种情况下,突变都能够创建并保存记录;也可以使用bcrypt代码成功地生成散列。
我试图在过去两周内解决这个问题,在这里搜索(对于非空字段,Graphql、node.js和sql不能返回null。和许多类似的)来寻找解决这个问题的线索。
谢谢你们所有人。
发布于 2020-07-05 04:46:10
我并不乐观,但我看到了一些可能导致这种情况的因素。
then的回调函数中。因此,create方法不返回任何内容。Repository.save() )时,它似乎返回Promise<Entity> (而不是Promise<Entity[]>)。如果是这样的话,您的GraphQL模式将期望此突变返回一个用户数组,但是解析器将返回一个用户。尝试将返回类型更改为Promise<User>
@Mutation(returns => User)
create(@Arg("newuser") newuser: UserInput): Promise<User> {
return bcrypt.hash(newuser.loginpassword, 12)
.then( hash => {
const new_user = this.usersRepository.create(newuser);
new_user.loginpassword = hash;
return this.usersRepository.save(new_user);
});
}https://stackoverflow.com/questions/62736206
复制相似问题