在Node.js开发中,参数校验是非常常见的需求,无论是API接口、输入参数等均需要进行校验,保证参数的正确性,提高代码的可维护性和稳定性。本文将详细讲述Node.js中常见的参数校验方法,包括内置的assert模块、使用第三方库Joi等,以及如何灵活使用这些方法。
assert模块
Node.js内置的assert模块是一个简单的断言测试框架,用于检查是否达到预期,如果不符合,则抛出AssertionError。在参数校验方面,assert模块可以用来检查参数是否符合特定的类型,范围等条件。
以下是assert模块几个常见的用法:
assert.strictEqual(actual, expected[, message])
该方法用于检查两个值是否严格相等,如果不相等则会抛出AssertionError。
示例代码:
const assert = require('assert'); function add(x, y) { return x + y; } assert.strictEqual(add(1, 2), 3, 'add(1,2) === 3');
assert.ok(value[, message])
该方法用于检查是否为真值,如果不是则会抛出AssertionError。
示例代码:
-- -------------------- ---- ------- ----- ------ - ------------------ -------- ---------------- - -- ------- --- --- --------- - ----- --- -------------- - --------- - - --------------------------
assert.throws(block[, error][, message])
该方法用于检查代码块是否抛出异常,如果未抛出或抛出的异常类型与期望值不一致,则会抛出AssertionError。
示例代码:
-- -------------------- ---- ------- ----- ------ - ------------------ -------- ----------- -- - -- -- --- -- - ----- --- --------------- -- ------- - ------ - - -- - ---------------- -- - ------------ --- -- --------- -- -------
assert.deepEqual(actual, expected[, message])
该方法用于检查两个对象是否深度相等,即检查对象的值是否相等。
示例代码:
const assert = require('assert'); const obj1 = { a: { b: 1 } }; const obj2 = { a: { b: 2 } }; assert.deepEqual(obj1, obj2, 'obj1 deepEqual obj2');
第三方库Joi
相对于assert模块,Joi是一种功能更为强大的参数校验库。它基于函数式编程的思想,提供了丰富的验证规则以及组合器,能够非常方便地进行复杂的参数校验。
以下是Joi库几个常见的用法:
Joi.number().required()
该方法用于检查值是否是数值类型且不能为空,如果不是,则会抛出ValidationError。
示例代码:
-- -------------------- ---- ------- ----- --- - --------------- ----- ------ - ------------ ---- ------------------------ --- ----- ------ - ----------------- ---- ----- --- -------------------------- -- ---------------- ----- ----- ----- ------- ------ ---- -- - -------
Joi.string().email()
该方法用于检查值是否是邮箱格式,如果不是,则会抛出ValidationError。
示例代码:
-- -------------------- ---- ------- ----- --- - --------------- ----- ------ - ------------ ------ --------------------- --- ----- ------ - ----------------- ------ --------------- --- -------------------------- -- ---------------- ----- ------- ----- ------- -------- ---- -- - ----- ------
Joi.number().min(min)
该方法用于检查值是否大于等于给定的最小值,如果不是,则会抛出ValidationError。
示例代码:
-- -------------------- ---- ------- ----- --- - --------------- ----- ------ - ------------ ---- --------------------- --- ----- ------ - ----------------- ---- -- --- -------------------------- -- ---------------- ----- ----- ----- ------- ------ ---- -- ------ ---- -- ----- -- ---
Joi.array().items(schema)
该方法用于检查数组中每个元素是否符合给定的schema规则,如果不符合,则会抛出ValidationError。
示例代码:
-- -------------------- ---- ------- ----- --- - --------------- ----- ------ - ------------------ ------------ --------- ------------- --------- ------------- -- -- ----- ------ - ----------------- - --------- -------- --------- ------ -- - --------- ---- --------- ------ -- --- -------------------------- -- ---------------- ----------------- ----- ------- ----------- ---- -- - -------
自定义校验函数
除了内置的assert模块和Joi库外,我们还可以根据具体的业务需求编写自定义的校验函数。这种方式可以更加灵活地定义校验规则,例如根据某个状态判断参数是否可用等。
示例代码:
function checkParams(params) { if (params.status === 'disabled') { throw new Error('params is disabled'); } } checkParams({ status: 'enabled' }); // 校验通过 checkParams({ status: 'disabled' }); // 校验未通过,抛出异常
总结
参数校验是Node.js开发过程中必不可少的一环,合理的参数校验能够更好的保障代码的可维护性和稳定性。本文讲述了Node.js中常见的参数校验方法,包括内置的assert模块、使用第三方库Joi等,以及如何编写自定义校验函数。这些方法的应用可以非常灵活地满足不同的业务需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646e34cc968c7c53b0cc02bd