国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

推薦一個基于Node.js的表單驗證庫

2024-05-06 15:42:27
字體:
來源:轉載
供稿:網(wǎng)友

API 在執(zhí)行過程中的一個基本任務是數(shù)據(jù)驗證。 在本文中,我想向你展示如何為你的數(shù)據(jù)添加防彈驗證,同時返回風格良好的格式。

在 Node.js 中進行自定義數(shù)據(jù)驗證既不容易也不快。 為了覆蓋所有類型的數(shù)據(jù),需要寫許多函數(shù)。 雖然我已經(jīng)嘗試了一些 Node.js 的表單庫 —— Express 和 Koa ——他們從未滿足我的項目需求。 這些擴展庫要么不兼容復雜的數(shù)據(jù)結構,要么在異步驗證出現(xiàn)問題。

使用 Datalize 在 Node.js 中進行表單驗證

這就是為什么我最終決定編寫自己的小巧而強大的表單驗證庫的原因,它被稱為 datalize。 它是可擴展的,因此你可以在任何項目中使用它,并根據(jù)你的要求進行自定義。 它能夠驗證請求的正文、查詢或參數(shù),還支持async 過濾器和復雜的JSON結構,如 數(shù)組 或 嵌套對象。

Github:https://github.com/flowstudio/datalize

配置

Datalize可以通過npm安裝:

npm install --save datalize

要解析請求的正文,你應該使用其他的庫。 如果你還沒有用過,我建議使用 koa-body for Koa 或 body-parser for Express。

你可以將本教程用于已配置好的HTTP API服務器,也可以使用以下簡單的Koa HTTP服務器代碼。

const Koa = require('koa');const bodyParser = require('koa-body');const app = new Koa();const router = new (require('koa-router'))();// helper for returning errors in routesapp.context.error = function(code, obj) {this.status = code;this.body = obj;};// add koa-body middleware to parse JSON and form-data bodyapp.use(bodyParser({enableTypes: ['json', 'form'],multipart: true,formidable: {maxFileSize: 32 * 1024 * 1024,}}));// Routes...// connect defined routes as middleware to Koaapp.use(router.routes());// our app will listen on port 3000app.listen(3000);console.log('🌍 API listening on 3000');

但是,這不是生產(chǎn)環(huán)境下的設置(你還應該使用logging,強制 授權, 錯誤處理等),不過這幾行代碼用于向你正常展示后面的例子足夠了。

注意:所有代碼示例都基于 Koa,但數(shù)據(jù)驗證代碼也同樣適用于 Express。 datalize 庫還有一個實現(xiàn) Express 表單驗證的例子。

一個基本的Node.js表單驗證案例

假設你的 API 中有一個 Koa 或 Express Web 寫的服務和一個端點,用于在數(shù)據(jù)庫中創(chuàng)建包含多個字段的用戶數(shù)據(jù)。其中某些字段是必需的,有些字段只能具有特定值,或者必須格式化為正確的類型。

你可以像這樣寫一個簡單的邏輯:

/** * @api {post} / Create a user * ... */router.post('/', (ctx) => {  const data = ctx.request.body;  const errors = {};    if (!String(data.name).trim()) {    errors.name = ['Name is required'];  }    if (!(/^[/-0-9a-zA-Z/./+_]+@[/-0-9a-zA-Z/./+_]+/.[a-zA-Z]{2,}$/).test(String(data.email))) {    errors.email = ['Email is not valid.'];  }    if (Object.keys(errors).length) {    return ctx.error(400, {errors});  }    const user = await User.create({      name: data.name,      email: data.email,  });    ctx.body = user.toJSON();});            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 濮阳县| 合水县| 盈江县| 林口县| 白玉县| 田东县| 长子县| 盐山县| 锦屏县| 宁晋县| 阿拉善左旗| 龙里县| 平顺县| 黄大仙区| 阳信县| 盱眙县| 木里| 凭祥市| 汤阴县| 平安县| 衡阳市| 新沂市| 尼木县| 海林市| 南召县| 清远市| 双流县| 黄陵县| 绥宁县| 巴彦县| 曲阜市| 祁阳县| 丰都县| 舟山市| 蒙自县| 江都市| 营口市| 定兴县| 闸北区| 乐亭县| 江都市|