【问题标题】:Node JS POST | PUT body validation节点 JS 发布 | PUT 身体验证
【发布时间】:2017-03-28 16:14:22
【问题描述】:

生产级环境中,POST/PUT 正文验证的标准或多或少是什么?

我的方法一直是这样的:

const isValid = (req.body.foo && /[a-z0-9]*/i.test(req.body.foo))

仅检查变量是否存在且不包含意外字符。

【问题讨论】:

  • 取决于您要验证的内容。有一些库可以帮助您解决这个问题,例如 joi

标签: javascript node.js validation express


【解决方案1】:

您使用 Express 标记了您的问题,因此我将专注于 Express 中的请求正文验证。对于 Express,有两个最流行的用于验证的模块:

两者都稳定且广泛使用。 您可以根据自己喜欢的验证语法使用它们中的任何一个。第一个在内部使用validator。 第二个是内部使用joi

见:

express-validator 在路由处理程序中的使用示例:

req.checkBody('postparam', 'Invalid postparam').notEmpty().isInt();
req.checkParams('urlparam', 'Invalid urlparam').isAlpha();
req.checkQuery('getparam', 'Invalid getparam').isInt();

express-validation 用作中间件的示例

validate({body: {
  email: Joi.string().email().required(),
  password: Joi.string().regex(/[a-zA-Z0-9]{3,30}/).required()
}})

这会返回一个中间件。该对象通常作为模块导出并存储在不同的文件中。

【讨论】:

  • 拜托!也放代码而不是放链接。
  • @UtkarshDubey 我添加了代码示例。查看更新的答案。
【解决方案2】:

在生产级环境中,通常将验证步骤视为中间件(使用 Express),并且在一般情况下,人们使用验证库或自定义模块来匹配模式或检查对象,因此通常如下所示:

import myValidation from '../helpers/validation';
const validateUserBody = (req, res, next) =>  {
  return myValidation(req.body)
           ? next()
           : res.status(400).json({message: "Bad body"})
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多