VineJS 实战:Node.js 后端的高性能校验
VineJS 是 AdonisJS 团队打造的专用 HTTP 校验库:比通用库更快、专为表单与 JSON 请求设计。本文讲解校验链、嵌套对象与 Express 集成。
VineJS 定位精确——HTTP 请求校验:vine.object({ email: vine.string().email() }) 编译为校验器执行,性能优于通用校验库。ESM-only、TS 原生,正确处理表单数据的特殊性(checkbox、空字段)。
为什么是 VineJS
通用校验库(Zod 等)服务一切数据;VineJS 专注 HTTP 请求体——为此做了两件事:预编译校验器(Schema 编译为函数,性能优化)与表单语义内建(HTML 表单的怪癖如空字符串/勾选框开箱处理)。
Express 集成
import vine from '@vinejs/vine';
const createUserValidator = vine.compile(
vine.object({
name: vine.string().minLength(2),
email: vine.string().email(),
age: vine.number().min(18).optional(),
subscribe: vine.boolean().optional(), // checkbox 语义内建
})
);
app.post('/users', async (req, res) => {
try {
const data = await createUserValidator.validate(req.body);
// 校验通过——类型已收窄
} catch (error) {
res.status(422).json({ errors: error.messages });
}
});
校验链与嵌套
vine.object({
items: vine.array(vine.object({
sku: vine.string(),
qty: vine.number().min(1),
})).minLength(1),
address: vine.object({
city: vine.string(),
zip: vine.string().regex(/^\d{6}$/),
}),
});
数组、嵌套对象、正则、枚举(vine.enum)——HTTP 请求的校验需求全覆盖。
常见问题(FAQ)
Q:VineJS 和 Zod 怎么选?
纯后端 HTTP 校验、性能敏感选 VineJS;全栈共享 Schema(前后端同构)选 Zod/Valibot。VineJS 是"后端专用优化"。
Q:非 AdonisJS 项目能用吗?
能——独立库,Express/Fastify/Hono 任意框架可用。
Q:错误消息中文化?
messagesProvider 自定义消息——按字段与规则映射中文文案。
参考文档
本文依据公开文档整理,示例需按项目依赖版本验证;不将文档中的性能描述视为本项目实测结果。