首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在带有bcrypt的非空字段Mutation.create中返回null

不能在带有bcrypt的非空字段Mutation.create中返回null
EN

Stack Overflow用户
提问于 2020-07-05 02:24:05
回答 1查看 2.2K关注 0票数 0

我正在使用阿波罗服务器,typeorm,bcrypt和下面的打字机进行打字。当运行突变查询时,它会抛出错误“无法为非空字段返回null”。但是它使用哈希密码将数据保存到数据库中(我也可以通过使用console.log来确定这一点);只有突变查询在浏览器中抛出错误。

这是变异解析器:

代码语言:javascript
复制
@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相关内容被注释掉时,如下面所示,不返回错误(当然,密码没有散列)。

代码语言:javascript
复制
@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。和许多类似的)来寻找解决这个问题的线索。

  1. 第一个版本(包括bcrypt代码)有什么问题?我尝试将返回类型更改为用户从允诺到任何,再添加一个返回用户对象而不是承诺对象的.then语句?
  2. 同样在对于非空字段,Graphql、node.js和sql不能返回null。,本杰也在暗示https://www.graphile.org/postgraphile/why-nullable/#nulls-in-graphql。但我完全不知道如何编写可空的Mutation.create。有人能提示或指点一个例子或这样的模式吗?
  3. 如果我将create的返回声明保留为“允诺”而不是“答应”,类型记录是不高兴的,并且期待返回语句。但是,如果我在末尾添加返回语句,则create将立即返回。那么,返回声明作为“承诺”是正确的方式吗?

谢谢你们所有人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-05 04:46:10

我并不乐观,但我看到了一些可能导致这种情况的因素。

  1. 在第一个代码段中,唯一的返回语句是传递给then的回调函数中。因此,create方法不返回任何内容。
  2. 我看了typeORM的src。当输入值是单个实体对象( Repository.save() )时,它似乎返回Promise<Entity> (而不是Promise<Entity[]>)。如果是这样的话,您的GraphQL模式将期望此突变返回一个用户数组,但是解析器将返回一个用户。

尝试将返回类型更改为Promise<User>

代码语言:javascript
复制
@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);
    });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62736206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档