typescript - 如何使用 typeorm 和 apollo 在 graphql 上返回自定义错误
问题描述
您好,我正在尝试返回错误自定义用户创建的示例并且电子邮件存在:
{
"errors": [
{
"message": "The email exists",
"statusCode": "400"
}
],
"data": null
}
我现在有这个:
我的 APP.TS:
export async function startServer() {
const app = express();
const schema = await createSchema();
useContainer(Container);
const connection = await createConnection();
const server = new ApolloServer({
schema,
context: ({ req, res }: any) => ({ req, res }),
});
server.applyMiddleware({ app });
return app;
}
解析器.TS:
@Resolver()
export class CreateUserResolver {
//dependency inject
constructor(private readonly userService: UserService) {}
//create User Mutaton
@Mutation(() => User)
async register(
@Arg('data')
data: RegisterInput,
): Promise<Partial<User> | Object> {
const user = this.userService.findOrCreate(data);
return user;
}
}
输入:
@InputType()
export class RegisterInput {
@Field()
@IsEmail({}, { message: 'Invalid email' })
email: string;
@Field()
@Length(1, 255)
name: string;
@Field()
password: string;
}
服务:
constructor(
@InjectRepository(User)
private userRep: Repository<User>,
) {}
async findOrCreate(data: Partial<User>): Promise<Partial<User> | Object> {
let user = await this.userRep.findOne({ where: { email: data.email } });
if (user) throw new Error('user already exists');
data.password = await bcrypt.hash(data.password, 12);
user = await this.userRep.save({
...data,
});
return user;
}
目前我发现的唯一解决方案是使用:
if (user) throw new Error ('用户已经存在');
但我无法想象如何使用状态码或只返回错误消息而不是所有这些消息:
解决方案
您正在以正确的方式进行操作。你应该坚持 Apollo 产生的错误,因为它是一个 graphql 标准。当然,您不想向最终用户显示堆栈跟踪。要为生产禁用堆栈跟踪,请传递debug: false
给 Apollo Server 构造函数。
来源:https ://www.apollographql.com/docs/apollo-server/data/errors/
推荐阅读
- mysql - Sql-Alchemy 按 id 列表分组和过滤
- android - 使用 Retrofit 和 Kotlin 使用多态 Json
- azure - 带有嵌套数组的参数 - 可以迭代吗?
- r - 在 R 中的函数内向 data.table 添加新列
- c# - 如何将我的 Unity android 应用程序连接到 000webhost 数据库?
- java - Selenium 在第二次迭代中的奇怪行为
- html - 我无法为 div 设置背景图像属性
- r - 使用 Shiny 应用程序保存数据时出现问题
- php - 无法在 apache2 httpd 服务器上配置 php。找不到 .so 文件所在的 php 模块
- c++ - Can't compile a programm from git: 串行问题 STM32L476