node学习—validate数据库验证

2023-11-13

数据库验证

一、数据库验证

在这里插入图片描述

//service/studentService
const Student = require("../models/Student");
const { Op } = require("sequelize");
const Class = require("../models/Class");
const validate = require("validate.js");
var dayjs = require('dayjs');
var utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
const { pick } = require("../util/propertyHelper");;

exports.addStudent = async function (stuObj) {
  stuObj = pick(stuObj, "name", "birthday", "sex", "mobile", "ClassId");//将需要的属性筛选,避免用户恶意传入值
  validate.validators.classExits = async function (value) {//班级是否存在去数据库验证,所以是异步
    const c = await Class.findByPk(value);
    if (c) {
      return;
    }
    return "is not exist";
  };

  const rule = {//验证规则
    name: {
      presence: {
        allowEmpty: false,
      },
      type: "string",
      length: {
        minimum: 1,
        maximum: 10,
      }
    },
    birthday: {
      presence: {
        allowEmpty: false,
      },
      datetime: {
        dateOnly: true,//将日期转换成时间戳
        earliest: +dayjs.utc().subtract(70, "y"),//最大不能超过70岁
        latest: +dayjs.utc().subtract(10, "y"),//最小不能低于10岁
      }
    },
    sex: {
      presence: true,
      type: "boolean",
    },
    mobile: {
      presence: {
        allowEmpty: false,
      },
      format: /1\d{10}/,
    },
    ClassId: {//班级是否存在的验证需要自行封装
      presence: true,
      numericality: {
        onlyInteger: true,
        strict: false,
      },
      classExits: true,//封装的班级存在验证规则
    }
  }
  await validate.async(stuObj, rule);//因为有班级的异步验证,这里也需要异步
  //验证通过则添加,失败则报错停止添加
  const ins = await Student.create(stuObj);
  return ins.toJSON();
};
///util/propertyHelper
exports.pick = function (obj, ...props) {
  if (!obj || typeof obj !== "object") {//不是对象
    return obj;
  }
  const newObj = {};
  for (const key in obj) {//是对象,赛选数据库需要的属性
    if (props.includes(key)) {
      newObj[key] = obj[key];
    }
  }
  return newObj;
};
//services/studentService
const validate = require("validate.js");
var dayjs = require('dayjs');
var utc = require('dayjs/plugin/utc')
dayjs.extend(utc)

validate.extend(validate.validators.datetime,{//生日验证规则
  /**
   * 该函数会自动用于日期格式转换
   * 它会在验证时自动触发,它需要将任何数据转换为时间戳返回
   * 如果无法转换,返回NaN
   * @param {*} value 传入要转换的值
   * @param {*} options 针对某个属性的验证配置
   */
  parse(value,options){
    let formats = ["YYYY-MM-DD HH:mm:ss", "YYYY-M-D H:m:s", "x"];//允许的日期格式
    if (options.dateOnly) {
      formats = ["YYYY-MM-DD", "YYYY-M-D", "x"];
    }
    return +dayjs.utc(value, formats, true);
  },
  /**
   * 用户显示错误消息时,使用的显示字符串
   */
  format(value, options) {
    let format = "YYYY-MM-DD";
    if (!options.dateOnly) {
      format += " HH:mm:ss";
    }
    return dayjs.utc(value).format(format);
  },
})
//index
const stuSer = require("./services/studentService");
require("./init");

stuSer.addStudent({
  name: "小雷",
  birthday: '2008-5-17',
  sex: true,
  mobile: '17671234628',
  ClassId: '13',
  deletedAt: "2010-1-1",
  a: 3,
  b: 4,
}).catch((res)=>{
  console.log(res);
});

时间不符合需求
在这里插入图片描述
添加成功
在这里插入图片描述
已经剔除了不需要的属性
在这里插入图片描述
博主开始运营自己的公众号啦,感兴趣的可以关注“飞羽逐星”微信公众号哦,拿起手机就能阅读感兴趣的文章啦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node学习—validate数据库验证 的相关文章

  • 将 jQuery 集成到电子应用程序中

    我正在尝试将 jquery 功能添加到用 Electron 编写的桌面应用程序中 使用电子快速启动存储库 我将下载的 jquery 文件添加到main html像这样的文件 or so 然后在index js我正在文件中添加代码create
  • 尝试安装 gulp 时 npm 挂起

    UPDATED 当我尝试使用 npm install 或任何变体安装任何软件包时 npm install gulp g verbose npm install gulp verbose npm install gulp npm instal
  • 为什么我在 Intellij IDEA 11 中调试 Nodejs 应用程序失败?

    我有一个单进程 node js 应用程序 我希望使用 Intellij IDEA 11 32 位进行调试 node js 也是 32 位 因此 我放置一个初始断点并运行 调试器在断点处停止 但随后拒绝执行以下任何操作 步入 转到另一个断点
  • node npm run watch 退出状态 3221225725

    我必须格式化我的驱动器 但我的一个项目不再工作 所有其他相同类型的项目都运行良好 这是 Laravel Vue JS 问题是我无法运行 npm run watch dev 或 production 他们都给出了错误 拉拉维尔 5 7 npm
  • JavaScript TypeError:无法读取未定义的属性“startsWith” - 不和谐机器人

    在开始这个问题时 我必须说我对 javascript 知之甚少 我在 Java 中练习过 只是想制作一个 有点 简单的 Discord 机器人 它会随机说出消息 我将各种教程中的 2 段代码组合在一起 目前有 var Discord req
  • 找到 Webpack 配置文件但未配置条目

    我正在尝试为我的个人项目组织一个 webpack 2 模板webpack dev server并使用 npm 命令运行它 但我收到此错误 Configuration file found but no entry configured 这很
  • 我怎样才能摆脱错误:无法在 Heroku 上找到模块“模型”

    我在 Heroku 上不断收到此错误 错误 找不到模块 模型 我正在使用 Node JS 我在用着这个 Node JS 项目 https github com gravityonmars nodejs starter 我从 Heroku 复
  • Node + Express 与静态 HTML。如何将所有请求路由到index.html?

    我正在开发一个单页 Web 应用程序 使用 Node Express 和 Handlebars 进行模板化 目前 index html 的一切都运行良好 它由一个非常标准的 server js 文件提供 var express requir
  • Node + Express .post 路由抛出错误。预期回调,获得对象

    我目前正在开发一个使用 Express Node 的应用程序 我最近添加了一个新的 post路线到app js文件 使用以下语法 app post api posts saveComment posts saveComment posts上
  • Node.js 有水豚吗?

    有谁知道 Node js 是否有类似 capybara 的东西 怎么样Zombie http zombie labnotes org 僵尸 js 使用 Node js 进行极其快速的无头全栈测试 The Bite 如果你要编写一个速度极快的
  • 以html格式显示npm审计漏洞

    有没有办法将 npm 审计报告显示为 html 页面 目前我只能看到使用以下命令以 json 格式输出报告的选项 npm audit json 我写了一个NPM包 https www npmjs com package npm audit
  • 具有独立 Node.js 服务器的虚拟主机

    目前有没有一种方法可以使用node js服务器进行虚拟托管 即在一个IP下托管多个域 当然 你可以使用bouncy https github com substack bouncy or 节点 http 代理 https github co
  • 如何从控制器返回 PDF 文件

    我正在尝试使用 NestJs 从控制器端点返回 PDF 文件 未设置时Content typeheader 返回的数据getDocumentFile 很好地返回给用户 然而 当我添加标头时 我得到的返回似乎是某种奇怪形式的 GUID 响应总
  • 如何模拟“焦点”和“打字”事件

    尝试模拟 onfocus 和打字事件 但它不起作用 Sub Login MyLogin MyPass Dim IEapp As InternetExplorer Dim IeDoc As Object Dim ieTable As Obje
  • Mongodb更新很多

    我正在使用express js 和 npm 模块 mongodb 进行开发 并以 mongodb 作为数据库 我有两个集合 即 用户 和 活动 一个用户可能有数千个活动 首先 我将用户的 id 姓名和图片 url 存储到 关系的活动文件 请
  • Sequelize.js - “不关联到”

    我在从数据库获取完整数据时遇到一些问题 那是我的模型 User module exports function sequelize DataTypes return sequelize define user id type DataTyp
  • socket.io 作为客户端

    有什么方法可以将socketio作为客户端运行 不是浏览器 而是nodejs脚本 我需要将数据从服务器广播到一些客户端 浏览器 和另一台linux机器 仅运行nodejs来获取变量 没有浏览器 欢迎任何想法 Regards github上有
  • 当请求新页面时,如何将 AngularJS 路由与 Express (Node.js) 结合使用?

    我正在使用 Express 它从静态目录加载 AngularJS 一般情况下我会要求http localhost 其中 Express 为我服务index html以及所有正确的 Angular 文件等 在我的 Angular 应用程序中
  • Mongoose 独特的验证不起作用。保存重复条目

    我正在开发一个 NodeJS 应用程序 其中express是框架 MongoDB是数据库 我正在使用猫鼬插件 我有一个父母模型 我已经添加了独特 真实到场 mobile 但是每当我添加相同的手机号码时 唯一性验证就会失败 除了保存重复的文档
  • 我想在“npm install”上下载一些资源,大概使用“预发布”脚本

    具体来说 我想在运行 npm install 时下载 angular min js 从我读到的here https npmjs org doc scripts html做这些事情的地方是在预发布脚本 它还提到我不需要依赖在系统上安装 wge

随机推荐