GraphQL 中还设计了一套类型系统,在这个类型系统的约束下,可以获得与 TypeScript 相近的相对安全的开发体验。...把我们所需要的字段合在一起,我们把它称之为某某的选择集。上面的 name、desc、ratings 合在一起则称之为 movie 的选择集,同理,movie 是 myQry 的选择集。...你可能在请求体中注意到,genre 参数的值没有被双引号括起来,也不是任何内置类型。看到 Schema 定义,COMEDY是枚举类型MovieTypes中的枚举成员。...接口指的是 GraphQL 实体类型本身提供字段的集合,定义一组与外部沟通的方式。使用了 implements的类型必须包含接口中定义的字段。...而GraphQL服务配置中我们至少要给出 schema, schema 应该是一个 GraphQLSchema实例,对于我们前面例子中直接写的 Schema Language,是不能被识别的,此时我们需要借助
类型系统是后端开发很重要的一环,Nest是使用TypeScript实现的框架,因此原生就支持TypeScript,而且还大量使用了注解,熟悉 Spring 的朋友会感到十分亲切。..., providers: [AppService], }) export class AppModule {} 可以看到项目的根模块AppModule导入了项目中的另一个模块CatsModule和外部依赖...很多注解的含义也与 Spring 的一致,像这里的@Controller、@Get和@Post都是用来声明路由和 http 请求类型的。...连接数据库 例子中使用mongoose连接和操作本地MongoDB数据库。为了更方便使用,Nest提供了@nestjs/mongoose包,对mongoose包装了一层,使其更符合Nest的使用风格。...操作数据库的步骤如下: app.module中定义连接的数据库:MongooseModule.forRoot('mongodb://localhost/nest') cat.schema中定义 Schema
yarn add express cors mongoose 我们还需要安装它们的类型作为开发依赖项,帮助 TypeScript 编译器理解这些包。.../types/todo" import { model, Schema } from "mongoose" const todoSchema: Schema = new Schema( {...这样,我们现在就可以在其他文件中使用 Todo 模块来与数据库交互。...接下来,我使用类型转换来避免拼写错误,并限制 body 变量与 ITodo 类型匹配,然后基于该模块创建一个新的 Todo。...如果 Todo 被成功保存,我们将更新数据,否则将会抛出错误。
apolloServerOptions: { tracing: true, // 设置为true时,以Apollo跟踪格式收集和公开跟踪数据 debug: true, // 一个布尔值,...,是一种机制,它使用额外的HTTP头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。...当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。...// app/model/user.ts module.exports = (app: any) => { const mongoose = app.mongoose; const Schema...= mongoose.Schema; const UserSchema = new Schema({ open_id: String!
一,先定义了一个goods(商品)的models var mongoose = require('mongoose'); var Schema = mongoose.Schema; var productSchema...mongoose = require('mongoose'); var userSchema = new mongoose.Schema({ "userId": String, "userName...比如上述的只是想实现在添加商品的时候,顺便把productNum和checked的值赋给users表中。我们无须把属性存储到goods中。...var mongoose = require('mongoose'); var Schema = mongoose.Schema; var productSchema = new Schema({...有问题可以留言一起讨论。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
一、Node.js默认使用commonJs的模块化方案,TypeScript默认是ES6的模块化方案,两者有本质区别。...限制对象一旦生成那么无法改变,除非删除数据库 3.限制对象的增删改查都返回的是一个promise对象, 如果这时候去 if() 里判断,无论有什么样的结果,都是true, 而且这个 CRUD 操作都是异步,所以我们把外部函数变成...async 函数, 这样可以配合 await 实现最佳异步,还可以获取他们的返回值进行 if 判断。...= require('mongoose'); module.exports = new Promise((resolve, reject) => { mongoose.connect('mongodb...const { Schema, model } = require('mongoose'); const ajaxschema = new Schema({ username: {
模式(schemas) 定义你的 schema Mongoose的一切都始于一个Schema。...const mongoose = require("mongoose"); const { Schema, model } = mongoose; const userSchema = new Schema...ne与指定的值不相等gt大于指定的值gte大于等于指定的值lt小于指定的值lte小于等于指定的值in与查询数组中指定的值中的任何一个匹配nin与查询数组中指定的值中的任何一个都不匹配Model.find...如果没有操作符或操作符不是 update 操作符,统一被视为 set 操作(mongoose 特有)字段相关操作符符号描述set设置字段值currentDate设置字段值为当前时间,可以是 Date 或时间戳格式...answerer 字段已经不是原来的 _id,而是被指定的 document 代替。
}); mongoose里,一切始于Schema: let tomSchema = mongoose.Schema({ name:String }) //接着,把这个Schema编译成一个Model...()定义自定义getter set:同上 alias:别名 索引相关 可以使用 schema type定义索引相关 index:布尔值 是否对这个属性创建索引 unique:布尔值 是否对这个属性创建唯一索引...= new Schema({ children:[childSchema], child:childSchema }) 子文档与文档的区别是 子文档不能单独保存,他们会在他们的顶级文档保存时保存...所有储存在此的_id 都必须是 Story model 中的 document 的 _id 保存 refs 保存 refs 与保存普通属性一样,把_id的值赋给他就好了 const author...{ if (err) return handleError(err); console.log('The author is %s', story.author.name); }) 设置被填充字段
文档内嵌与引用模式 MongoDB 是一种文档对象模型,使用起来很灵活,它的文档结构分为 内嵌和引用 两种类型。...使用 Mongoose 第一步要先定义集合的 Schema。...= require('mongoose'); const Schema = mongoose.Schema; const AuthorSchema = new Schema({ authorId:...const mongoose = require('mongoose'); const Schema = mongoose.Schema; const BookSchema = new Schema({...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 中设置虚拟值填充,否则 populate
1.创建集合 创建集合分为两步,-是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。...// mongoose.Schema() 是一个构造函数,要new一个实例对象 //2、设定集合规则 const courseSchema = new mongoose.Schema({ name...获取错误信息:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema = new mongoose.Schema...({ name: { type: String } }); const postSchema = new mongoose.Schema({ title: {...type: String }, // 1、使用ID将文章集合和作者集合进行关联 author: { type: mongoose.Schema.Types.ObjectId
,最后决定使用的技术栈就是 koa+typescript+mysql+mongodb来搭建项目。...上面两张图很清晰的展示了洋葱模型的工作流程,当然,具体的原理实现的话与本篇无关,就不在深入描述了,有兴趣的同学可以自己到网上搜一下哈。...Typescript 网上特别多关于“为什么要用Typescript开发”,“Typescript开发的好处和坏处”,“为什么不用Typescript开发”等等的争论和文章,有兴趣的同学也可以去说道说道哈.../database/mongoose' const { Schema } = mongoose const AccSchema = new Schema({}, { strict: false, /...(tableName, AccSchema, tableName) // disposeAccInsertData 方法用来处理日志信息,有些字段嵌套太要扁平化深或者去除空值冗余字段
= app.mongoose; const Schema = mongoose.Schema; const UserSchema = new Schema({ username: {...('User', UserSchema); }; module.exports = app => { const mongoose = app.mongoose; const Schema =...mongoose.Schema; const TokenSchema = new Schema({ token: { type: String, required: true }, }...e.errors); } 复制代码 登录接口编写 首先通过request对象的body属性得到请求中的用户名和密码; 通过用户名在MongoDB中查找用户,成功找到说明用户名正常; 通过将密码进行md5加密与存储的密码比对...'); } 复制代码 用户信息获取接口编写 获取用户信息的接口将只需要传递token即可; 我们通过将接收到的token进行Mongo查询,成功查询说明Token正常; 通过验证token正确性得到被写入的用户名
fetch 该方法用于渲染页面(页面组件加载前被调用【服务端或切换至目标路由之前】)前填充应用的状态树(store)数据,与asyncData方法类似,不同的是它不会设置组件的数据。...去官网看看 mongoose里面有三个概念,schemal、model、entity: Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型...模型使用 Schema 接口进行定义。 Schema 可以定义每个文档中存储的字段,及字段的验证要求和默认值。 mongoose.model() 方法将模式“编译”为模型。...const mongoose = require('mongoose') const Schema = mongoose.Schema // 定义模型 const produtSchema = new...}) // 使用模式“编译”模型 module.exports = mongoose.model('Goods', produtSchema) 常见字段类型和声明方式 const schema =
Schema.Type Schema.Type是由Mongoose内定的一些数据类型,基本数据类型都在其中,他也内置了一些Mongoose特有的Schema.Type。...都会默认配置这个属性,属性名为_id,除非自己定义,方可覆盖 var mongoose = require('mongoose'); var ObjectId = mongoose.Schema.Types.ObjectId...});//只有id:ObjectId 该类型的值由系统自己生成,从某种意义上几乎不会重复,生成过程比较复杂,有兴趣的朋友可以查看源码。...1.8 关于Array Array在JavaScript编程语言中并不是数组,而是集合,因此里面可以存入不同的值,以下代码等价: var ExampleSchema1 = new Schema...Documents Document是与MongoDB文档一一对应的模型,Document可等同于Entity,具有属性和操作性 注意: Document的`CRUD都必须经过严格验证的,参看2.5.2
fetch 该方法用于渲染页面(页面组件加载前被调用【服务端或切换至目标路由之前】)前填充应用的状态树(store)数据,与asyncData方法类似,不同的是它不会设置组件的数据。...字段值可以包含其他文档,数组及文档数组。 [crud-annotated-document.png] 更多的mongodb学习资料。...去官网看看 mongoose里面有三个概念,schemal、model、entity: Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型...模型使用 Schema 接口进行定义。 Schema 可以定义每个文档中存储的字段,及字段的验证要求和默认值。 mongoose.model() 方法将模式“编译”为模型。...const mongoose = require('mongoose') const Schema = mongoose.Schema // 定义模型 const produtSchema =
一起进入Nodejs与数据库的内容学习吧。...docker search mongo docker pull mongo # 拉下来之后启动的时候要把本机的数据文件位置与docker容器进行关联 # 在docker中使用 -v 进行挂载 # docker...接下来进行连接与操作mongodb数据库,这里选用使用量较高的mongoose模块。...('连接错误:') }); // 定义存储数据的sechema const Sechema = new mongoose.Schema({ name: String, title: String...docker search mysql docker pull mysql # 拉下来之后启动的时候要把本机的数据文件位置与docker容器进行关联 # docker启动镜像, -p 暴露3306端口
MongoDB的设计目标是极简、灵活,经常在Web应用栈的业务层被运用。...mongoose的相关概念 mongoose中提供了几个新的对象: + Schema(模式对象):Schema对象定义约束了数据库中的文档结构 + Model:Model对象作为集合中的所有文档的表示...监听MongoDB数据库的连接状态:在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接, 通过监视该对象的状态,可以来监听数据库的连接与断开 mongoose.connection.once...创建Schema(模式对象) let Schema = mongoose.Schema; let personSchema = new Schema({ name: String, age...创建Schema(模式对象) let Schema = mongoose.Schema; let personSchema = new Schema({ name: String, age
可以看到免费的集群给我们提供了 512MB 存储、共享的 RAM,这对我们初学者是绰绰有余的,还有一些其它选项可以自主选择,使用默认值也可。 5....app/model/books.js Mongoose 的一切始于 Schema。...const mongoose = require('mongoose'); const BooksSchema = new mongoose.Schema({ name: String,...这个错误是因为你已经定义了一个 Schema,之后又重复定义该 Scheme 导致的,错误代码如下所示: module.exports = mongoose.model('Books', BooksSchema...); 编写业务逻辑 Books 将业务逻辑处理放在 Books 这个类里面,并且可以不依赖于外部的任何服务,this.BooksModel 这个在测试时可以模拟数据进行传入。
领取专属 10元无门槛券
手把手带您无忧上云