我在打字稿中遇到了设计问题。在我的控制器中,我执行了一个验证,验证方法返回 422 响应,该响应结束了我尝试使用的线程或经过验证的数据。所以这是我的代码。在我的控制器中,我有
async createFeed(ctx : HttpContextContract){
await this.feedValidator.createFeedValidate(ctx)
return this.feedService.createFeed(ctx)
}
此处 await this.feedValidator.createFeedValidate(ctx)
执行验证逻辑,此方法返回 422 或已验证对象
try {
const payload = await ctx.request.validate({ schema: createFeedSchema, messages : msg })
return payload
} catch (error) {
return ctx.response.status(422).send(error.messages)
}
现在,使用这种方法,我无法访问验证方法返回的 payload
。
如果我尝试
let validatedData = await this.feedValidator.createFeedValidate(ctx)
return this.feedService.createFeed(ctx,validatedData)
如果验证返回 return ctx.response.status(422).send(error.messages)
无论如何,我可以做方法链或有很好的高级解决方案吗?
先谢谢你。
答案 0 :(得分:3)
您似乎在使用 AdonisJS。
如果您查看文档,发送方法 (ctx.response.status(422).send(error.messages)
) 会返回“void”,即什么都没有。
这就是为什么您无法从尝试捕获中获得回报的原因。
或者,您可以执行以下操作:
你的 createFeedValidateMethod 应该只包含这个:
return ctx.request.validate({ schema: createFeedSchema, messages : msg })
并在您的控制器中:
async createFeed(ctx : HttpContextContract){
try {
let validatedData = await this.feedValidator.createFeedValidate(ctx)
return this.feedService.createFeed(ctx, validatedData)
} catch (err) {
return ctx.response.status(422).send(error.messages)
}
}