【发布时间】:2021-02-20 07:19:32
【问题描述】:
我正在使用 Typescript、Koa 和 Sequelize 构建简单的 REST API。
如果客户端使用空字段“title”或“author”执行无效的 PUT 请求,它会返回 500 错误。我宁愿不报告这样的错误,而是希望返回“400 Bad Request”。 这样做的正确方法是什么?
这是控制器的一部分:
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 验证器作为装饰器的模型:
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;
}
错误信息:
"message": "Validation error: Validation notEmpty on title failed,\nValidation error: Validation notEmpty on author failed"
【问题讨论】:
-
错误是什么类型?您可以编写一个中间件来捕获每个异常并将某些类型转换为 HTTP 400。我会使用像
application/problem+json这样的标准格式并发出 422 Unprocessable Entity。 -
你很幸运,我得到的只是:
SequelizeUniqueConstraintError: Validation error
标签: node.js typescript sequelize.js koa sequelize-typescript