首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以正确的方式处理序列化验证错误?

如何以正确的方式处理序列化验证错误?
EN

Stack Overflow用户
提问于 2019-03-15 07:29:06
回答 1查看 1.2K关注 0票数 1

我正在用Typescript,Koa和Sequelize构建简单的REST API。

如果客户端使用空字段"title“或"author”执行无效的PUT请求,则会返回500错误。我不想报告这样的错误,而是想返回一个'400 Bad Request‘。那么正确的方法是什么呢?

以下是控制器的一部分:

代码语言:javascript
复制
import {JsonController, Get, Post, Put, Body, Param} from "routing-controllers";
import {Book} from "../models/Book";

@JsonController("/api")
export class BookController {
    @Put("/books/:id")
    async update(@Param("id") id: number, @Body() book: Book) {
        return await Book.update(book, {where: {id: id}});
    }
}

这是我使用Sequelize验证器作为装饰器的模型:

代码语言:javascript
复制
import {Table, Column, NotEmpty, Equals, Model, HasMany} from 'sequelize-typescript';

@Table({tableName: 'Books'})
export class Book extends Model<Book> {

    @NotEmpty
    @Column
    title: string;

    @NotEmpty
    @Column
    author: string;
}

错误消息:

代码语言:javascript
复制
"message": "Validation error: Validation notEmpty on title failed,\nValidation error: Validation notEmpty on author failed"
EN

回答 1

Stack Overflow用户

发布于 2021-02-20 07:19:33

尝试使用ValidationFailed挂钩

代码语言:javascript
复制
import {ValidationFailed} from 'sequelize-typescript'

@ValidationFailed
static afterValidateHook(instance, options, error) {
  throw new ErrorWithStatus(error.message, 400);
}

ErrorWithStatus在哪里

代码语言:javascript
复制
class ErrorWithStatus extends Error {
  status: number;

  constructor(message, status = 400) {
    super(message);
    this.status = status;
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55173499

复制
相关文章

相似问题

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