1.2 准备工作 1.首先你必须安装MongoDB和NodeJS 2.在项目只能够创建一个数据库连接,如下: var mongoose = require('mongoose'); //引用...如果子文档在更新时出现错误,将直接报在父类文档中,可以这样处理: ChildrenSchema.pre('save',function(next){ if('x' === this.name...,不是什么数据都能往数据库里丢或者显示到客户端的,数据的验证需要记住以下规则: 验证始终定义在SchemaType中 验证是一个内部中间件 验证是在一个Document被保存时默认启用的,除非你关闭验证...验证是异步递归的,如果你的SubDoc验证失败,Document也将无法保存 验证并不关心错误类型,而通过ValidationError这个对象可以访问 7.1 验证器 required 非空验证 min...,err是验证失败的错误信息 } }); 7.2 验证失败 如果验证失败,则会返回err信息,err是一个对象该对象属性如下 err.errors
注册功能 首先建立模型,在models.js建立对应的模型,这里因为是登录和注册,就写两个字段就行,如果需要,可以自行添加对应的字段名,unique表示用户名是唯一的,不让重复添加 const UserSchema...应该是用户填写密码,保存数据库的时候,应该是一段乱文,服务端看不懂的一段密码。这里就需要用到对密码加密处理,以前经常用的是md5,现在最常用的是bcryptjs加密方式。 ? ...所以不需要建立模型编写,登录时候,第一步肯定先判断用户是不是存在,如果用户不存在,直接返回状态码和错误信息,也不需要执行下一步,第二步用户名过了,接来下就是验证密码是否正确,通过compareSync验证面密码是否正确...,如果正确就返回,不正确的话也是返回状态码和错误信息,最后一步就是生成token,返回客户端,客户端可以通过token判断是哪个用户。...token校验 token校验,验证比如获取用户信息,发送什么东西的时候,判断token是否存在,如果存在可以执行,否则不能执行,全局写一个中间件,当每个接口使用的时候,直接调用就可以 const auth
yarn add -D @types/node @types/express @types/mongoose @types/cors 现在,TypeScript 不会再对你提示错误——它将使用这些类型来定义我们刚刚安装的库...就是说,现在如果我们能成功连接 MongoDB,服务器就会启动,否则,会抛出错误。 我们现在已经通过 Node、Express、TypeScript 和 MongoDB 完成 api 的构建。...FC (FC 代表函数组件),它接收 saveTodo() 方法为 props,该方法允许我们将数据保存到数据库。...getTodos() 方法会返回 promise —— 因此,我们可以调用 then 函数并用获取到的数据更新 state,或者在发生任何错误时抛出一个错误。...如果 Todo 被成功保存,我们将更新数据,否则将会抛出错误。
实际在数据库中产生的集合名为courses 2.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...: true }); // 调用实例对象下的save方法将数据保存到数据库中。...找到mongodb数据库的安装目录,将安装目录下的bin目录放置在环境变量中。...default: 默认值 获取错误信息:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema...type: String }, // 1、使用ID将文章集合和作者集合进行关联 author: { type: mongoose.Schema.Types.ObjectId
`为true,则为唯一索引 } }); 字符串 lowercase: 布尔值,是否在保存前对此值调用toLowerCase() uppercase: 布尔值,是否在保存前对此值调用toUpperCase...() trim: 布尔值,是否在保存前对此值调用trim() match: 正则,创建一个验证器,验证值是否匹配给定的正则表达式 enum: 数组,创建一个验证器,验证值是否是给定数组中的元素 数字 min...mongoose.connect(uri, options, function(error) { // 检查错误,初始化连接。回调没有第二个参数。...它们的实例就代表着可以从数据库保存和读取的 documents。从数据库创建和读取 document 的所有操作都是通过 model 进行的。...查询结果: 返回数据的格式是 {} 对象形式。 有多个数据满足查询条件的,只返回第一条。 查询条件 conditions 为 {}、 null 或 undefined,将任意返回一条数据。
animalSchema.index({ name: 1, type: -1 }); // schema level 虚拟值 Virtual [ ] Virtual是document的属性,但是不会保存到...,为此属性添加require验证器 default: 任何值或函数 设置此路径默认值,如果是函数m,函数返回值为默认值 select: 布尔值 指定query的默认projections validate...它们的实例就代表着可以从数据库保存和读取的 documents。 从数据库创建和读取 document 的所有操作都是通过 model 进行的。...,不过不会把文档返回给应用层。...Query 没有 remove()钩子,只有 docuemnt 有,如果设定了remove钩子,他将会在你调用 myDoc.remove()触发,而不是 myModel.remove(),另外,create
", "detail": { "surname": "This field is required." } } 接口调用者很快就能定位到错误原因。...rest : { stack, ...rest } }) ); 错误会默认抛出堆栈信息stack,在生产环境中,没必要返回给用户,在开发环境显示即可。...数据库我们采用的是mongodb,连接数据库前,我们要先来看一下mongoose。...简单的说,Mongoose就是对node环境中MongoDB数据库操作的封装,一个对象模型(ODM)工具,将数据库中的数据转换为JavaScript对象以供我们在应用中使用。...); mongoose.connection.on("error", console.error); 用户的 CRUD 项目中的模块是比较多的,我不会一一去演示,因为各个模块实质性的内容是大同小异的
实际在数据库中产生的集合名为courses 1.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...: true }); // 调用实例对象下的save方法将数据保存到数据库中。...找到mongodb数据库的安装目录,将安装目录下的bin目录放置在环境变量中。...default: 默认值 获取错误信息:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema...}, // 自定义错误信息 message: '您输入的值不符合验证规则' } } }); // 使用规则创建集合 const Post
然而,大多数开发人员会建议通过将相关数据分组在一起来组织项目结构,而不是将所有东西全部放在一起。...我们的示例应用程序是一个简单的用于身份验证的 REST API。当用户注册时,他们的信息被保存在 MongoDB 数据库中。当用户登录时,我们将验证他们的信息,如果验证成功,就返回一个令牌。...utils 文件夹包含辅助工具、验证器、错误处理器、常量等文件。应用程序中的其他文件可以调用它们来执行一些操作。...它们被几个文件或模块调用,用于验证或修改请求或数据块,因为它们具有可重用的结构。例如,开发一个辅助函数来验证电子邮件的格式是否合法。...const hasEmail = await User.find(query); console.log(hasEmail); // 如果找不到用户就抛出错误
对于特征工程,我们的类将具有进行对数变换的方法。最后,对于机器学习,我们的类将具有拟合、预测和验证方法。 我们将看到随着我们添加额外的属性和方法,类的实例化和方法调用变得越来越难以阅读。...使用面向对象编程(OOP) 首先,让我们转到Deepnote并创建一个新项目(如果你还没有帐户,可以免费注册)。...我们首先定义一个类的实例,并调用数据准备方法,使用我们希望使用的输入和输出: model = MLworkflow() features = ['bmi', 'age'] model.data_prep..._models[category_value] = {} 接下来,在数据准备类中定义一个数据准备方法。我们将首先为训练/测试集划分、模型类别和类别值定义属性。...首先,我们定义了一个单一的ML工作流类,它可以进行简单的EDA、数据准备、模型训练和验证。 然后,我们看到随着我们向类添加功能,对类实例的方法调用变得难以阅读。
完成项目目录初始化后,接下来先把 mongodb 全局得一些中间件、扩展方法给配置上,为接口开发做好准备工作 mongodb配置 1、安装 mongoose模块 npm install egg-mongoose...--save 2、配置 config 文件 // config/plugin.js exports.mongoose = { enable: true, package: 'egg-mongoose...status: status, body: body, msg, code: code } } } // 调用...ctx.app.emit('error', err, ctx); const status = err.status || 500; // 如果时生产环境的时候...500错误的详细错误内容不返回给客户端 const error = status === 500 && ctx.app.config.env === 'prod' ?
现在市面上可用的就是微博的t.cn和一些第三方的生成短链接工具,但这两类工具都有一些使用上的问题,例如:t.cn现在的规则是会出现一个中转页不会直接跳转,而第三方的工具因为是一个公共平台,有时可能会因一些不良信息导致整个平台无法访问...: 在这个应用中,我们使用了mongodb,之所以选择它是因为执行高效且低开销,所以执行起来也很高效,不过如果使用其他数据库也是没问题的。...: var objurl = { shortUrl: shortid, longUrl: url}; 最后,连接数据库并保存后将短链接结果返回客户端: mongoose.connect(setup.mongo_db...(result.longUrl); }) 后期大家可以对一些错误异常处理,数据统计等做一些增强,这里就不做补充了。...启动应用并测试 npm start 启动后,默认的访问端口为3000,我们首先测试下短链接生成页,这里我们post一个名为longUrl的长链接参数,数据对象为: {"longUrl" : "https
这是一个很好的经验法则:由于特殊情况不会经常发生,因此,如果您向函数提供正确的值并删除抛出的异常,如果函数失败了,则错误地使用了该异常。...让我们看一些具体的例子: 如果创建将用户输入保存到数据库的功能,则当数据库连接失败时,应引发异常。 对于相同的功能,你将创建一个验证器以检查用户的输入。提供无效值时,不应引发异常。...对于验证器类,无效值是一种很常见的情况。 1.1、Exception的一个很好的例子 这里有一个返回错误代码以指示错误情况的示例: class User { ......BadFunctionCallException 当不存在的函数被调用或向函数提供错误的参数时,将抛出此异常。由于此异常涵盖函数范围,而不是类中的方法,因此它通常由PHP抛出。...例如,当用户创建数组数据结构并且调用无效索引时,应引发OutOfBoundsException。而尝试使用8来获取星期几应该抛出OutOfRangeException。
CLR异常机制至少有一下几个优点: 1、正常控制流会倍立即中止,无效值或状态不会在系统中继续传播。 2、提供了统一处理错误的方法。 ...本建议首先阐述为什么要用抛出异常的方式来代替返回错误代码的方式。 对于一个成员方法来说,它要么执行成功,要么执行失败。成员方法成功的情况很容易理解。...但是如果执行失败了却没有那么简单,因为我们需要将导致执行失败的原因通知调用者。抛出异常和返回错误代码都是用来通知调用者的手段。 ...假设我们要实现这样一个简单的功能:应用程序需要完成一次保存新建用户的操作。这是一个分布式的操作,保存动作除了需要将用户保存在本地外,还需要通过WCF在远程服务器上保存数据。...以上通过实际的案例阐述了抛出异常相比于返回错误代码的优越性,以及在某些情况下错误代码将无用武之地,如构造函数、操作符重载及属性。
pm2等方式,在 Worker 线程中,process.exit()将停止当前线程而不是当前进程) app.js入口文件 这里是由koa提供基础服务 monggose负责连接mongoDB数据库 若干中间件负责...跨域、日志、错误、数据处理等 const conditional = require('koa-conditional-get'); const etag = require('koa-etag');...db数据库,挂载各种事件后,经由koa各种中间件,而后真正使用koa路由提供api服务(代码编写顺序,即代码运行后的业务逻辑,我们写前端的react等的时候,也提倡由生命周期运行顺序去编写组件代码,而不是先编写...但是登录后,你只能做你权限内的事情,例如你只是一个打工人,你说你要关闭这个公司,那么对不起,你的状态码此时应该是403 回到admin 此刻的你,想要清空这个缓存,调用/admin/cache接口,那么首先要经过...,就会抛出错误码和原因.接由洋葱圈外层的error中间件处理 /** * Error handler middleware * * @param {Object} ctx Koa
首先是电影基本信息,我们有 API /movie/:id,给定一个电影ID返回基本信息数据。...如果单单将所有资源整合到一个 API 之中,还有可能会因为整合了无关的数据而导致数据量的增加。...在本例中,Schema 定义了 name 为 String类型,那么你就不能传 Int类型进去,此时会抛出类型不符的错误。...同样的,如果传出的 ratings 数据类型不为 String,也同样会抛出类型不符的错误。 列表(List)、枚举类型(Enum) ?...字段得到的是一组 id,不符合 Schema 的定义,此时 GraphQL 会抛出错误。
对于个⼈而⾔,无论是学习还是维护——个⼈公众号,只要不不涉及⽀支付环节,注册一个订阅号足以。如果需要⽀付功能,那么需要注册服务号,服务号注册时需要企业相关证书。...如果需要结合⾃身业务进⾏定制,那么就需要申请成为开发者,然后调用微信提供的api结合⾃身业务进⾏扩展。...首先在左侧菜单中找到:开发 => 基本配置 然后接受同意,成为开发者 获取开发者ID(AppID)与开发者密码(AppSecret),并妥善保存(很重要) 配置URL⽩白名单,把...当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。...以mongodb为例: // mongoose.js // 连接数据库: const mongoose = require('mongoose') const { Schema } = mongoose
这些模块可以将日志存储在不同格式或级别的文件中。我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序中的 API 日志记录。...isEqual:此方法支持比较数组、数组缓冲区、布尔值、日期对象、错误对象、映射、数字、对象、正则表达式、集合、字符串、符号和类型化数组。...对象通过它们自己的方法比较,而不是通过继承的、可枚举的属性进行比较。函数和 DOM 节点则进行严格相等的比较,即使用 ===。 这里我们迭代每个对象的属性和值,并将它与旧对象进行比较。...如果当前对象的 value 不等于前一个对象中相同属性的值:base[key] 如果该值是对象本身,我们递归调用函数changes 直到它得到一个值,它最终将作为 result[key]=value 存储在...步骤3:创建一个插件用来 diff 并将其保存到数据库 现在我们需要跟踪数据库中的前一个 document 并在保存到 mongodb 之前创建一个 diff。
Winston的魅力 多样的日志存储方式:Winston支持多种日志传输方式,你可以选择将日志保存在控制台、文件,甚至是数据库中,根据你的应用需求灵活选择。...数据验证:内置的数据验证功能允许你定义哪些类型的数据可以被添加或更改在数据库中。这样不仅保证了数据的一致性,也避免了无效数据的录入。...链式查询:它还允许你通过链式调用来处理一些复杂的查询,让代码看起来更加优雅。 Mongoose的应用场景 想象你正在构建一个社交媒体应用,需要处理大量的用户数据和动态。...Mongoose能够帮助你快速构建出一个稳定的数据模型,同时通过它的验证机制确保数据的准确性和安全性。 或者在开发电商平台时,你需要对商品信息进行复杂的查询和更新。...本文将介绍几个在未来应用开发中可能成为“必备”的Node.js库。例如,如果你的项目中大量使用MongoDB数据库,那么Mongoose库对你来说可能是个救星。
领取专属 10元无门槛券
手把手带您无忧上云