package: '@switchdog/egg-graphql', }, 配置插件 通常插件都会有一些配置项,在/config/config.default.ts中配置即可: config.graphql...' ]; 配置完成之后,每个落到 /graphql的请求都会触发 GraphQL Schema 的查询。...当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。...使用 graphql 或 rest 端点时,实际上不必担心使用 CSRF 保护。对服务的请求应该是无状态的,并且不真正依赖Cookie或会话数据。...在定义字段时需要注明类型,这也是 graphql 的特点之一,是支持强类型的。如果非空,就在类型后面跟上一个!号。graphql 还包括枚举类型,列表和自定义类型。
yarn 装 nodesass 都会有问题,弃坑!..., component: 'pages/detail/_id.vue' }, ] } 更多路由配置去官网查看 asyncData 和 fetch asyncData 此方法在加载...{ foo: 'bar' }; }); $ GET / { "foo": "bar" } koa-bodyparser koa.js并没有内置Request Body的解析器,当我们需要解析请求体时需要加载额外的中间件...passport.serializeUser(function(user,done){ // 用户登录成功之后,会把用户数据存到session当中 done(null,user) }) // 反序列化(请求时...最后 项目中所有图片均来自网络,如果存在侵权情况,请第一时间告知。本项目仅做学习交流使用,请勿用于其他用途。
yarn 装 nodesass 都会有问题,弃坑!...detail-id', path: '/detail/:id?'..., component: 'pages/detail/\_id.vue' }, ] } 更多路由配置去官网查看 asyncData 和 fetch asyncData 此方法在加载...foo: 'bar' }; }); $ GET / { "foo": "bar" } koa-bodyparse koa.js并没有内置Request Body的解析器,当我们需要解析请求体时需要加载额外的中间件...passport.serializeUser(function(user,done){ // 用户登录成功之后,会把用户数据存到session当中 done(null,user) }) // 反序列化(请求时
cnpm install nodemon -g 在这里是全局安装 2.7:配置package.json启动命令,在开发环境的时候,直接可以通过cnpm run app来监听每次修改node的变化...,nodemon我们已经全局安装过了,可以在任何地方都可以使用,只要我们每次修改代码都会发生变化,这样我们就不会手动输入命令了 3.数据库mlab创建 3.1:mlab是MongoDB...链接数据库 cnpm install mongoose 4.2然后在你的入口文件引入(app.js), const mongoose require('mongoose') 4.3在我们的根目录创建一个...使用mongoose链接数据库,在我们的根目录引入config下面的db文件。...>>> api >>> useinfo.js文件,这个用于存放我们的请求接口的路由文件; 5.1.1在userinfo文件中引入express和路由,先写一个get请求方法, 5.2.2
本文源自工作中的一个问题,在使用 Mongoose 做关联查询时发现使用 populate() 方法不能直接关联非 _id 之外的其它字段,在网上搜索时这块的解决方案也并不是很多,在经过一番查阅、测试之后...内嵌是把相关联的数据保存在同一个文档内,我们可以用对象或数组的形式来存储,这样好处是我们可以在一个单一操作内完成,可以发送较少的请求到数据库服务端,但是这种内嵌类型也是一种冗余的数据模型,会造成数据的重复...Virtual 和 populate 实现 Mongoose 的 populate 方法默认情况下是指向的要关联的集合的 _id 字段,并且在 populate 方法里无法更改的,但是在 Mongoose...可以在创建 Schema 时在第二个参数 options 中设置,也可以使用创建的 Schema 对象的 set 方法设置。...Mongoose 关联查询时如何关联一个非 _id 字段,一种方式是直接使用 MongoDB 原生提供的 Aggregate 聚合管道的 lookup 阶段来实现,这种方式使用起来灵活,可操作的空间更大
不想要的值在字段后面添加 - 再加属性 比如去掉默认的_id User.find().select('name email -_id').then(result => console.log(result...mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。.../add时,呈现表单页面,并实现添加用户信息功能 当用户访问/modify时,呈现修改页面,并实现修改用户信息功能 修改用户信息分为两大步骤 1.增加页面路由 呈现页面 1.在点击修改按钮的时候...将用户ID传递到当前页面 2.从数据库中查询当前用户信息 将用户信息展示到页面中 2.实现用户修改功能 1.指定表单的提交地址以及请求方式 2.接受客户端传递过来的修改信息...找到用户 将用户信息更改为最新的 当用户访问/delete时,实现用户删除功能 实现代码: user.js const mongoose = require('mongoose');
// 当用户访问/add时,呈现表单页面,并实现添加用户信息功能 // 当用户访问/modify时,呈现修改页面,并实现修改用户信息功能 // 修改用户信息分为两大步骤 //...1.增加页面路由 呈现页面 // 1.在点击修改按钮的时候 将用户ID传递到当前页面 // 2.从数据库中查询当前用户信息 将用户信息展示到页面中 //...2.实现用户修改功能 // 1.指定表单的提交地址以及请求方式 // 2.接受客户端传递过来的修改信息 找到用户 将用户信息更改为最新的 // 当用户访问...(req, res) => { // 请求方式 const method = req.method; // 请求地址 const { pathname, query }...= require('mongoose'); // 创建用户集合规则 const userSchema = new mongoose.Schema({ name: { type
不利于上下文重用:传动程序启动之后常驻内存,不存在冷启动问题,而 ServerLess 是基于事件驱动的,第一次请求来了之后会下载代码、启动容器、启动运行环境、执行代码,这个过程称为冷启动,但是以 AWS...Lambda 为例,函数调用之后执行上下文会被冻结一段时间,在我们上面的例子中每次函数执行都会初始化数据库链接,这是一个很消时的操作,我们可以将这段逻辑放在函数之外,利用上下文重用,在开发层面可以做进一步优化...每个 schema 都会映射到一个 MongoDB collection ,定义这个 collection 里的文档构成。...); 编写业务逻辑 Books 将业务逻辑处理放在 Books 这个类里面,并且可以不依赖于外部的任何服务,this.BooksModel 这个在测试时可以模拟数据进行传入。...对于这种初始化链接的操作,尽量放在函数之外,避免每次函数来临都要去初始化这样一个耗时的操作,我们可以利用函数的执行上下文重用,在启动环境执行代码时去初始化我们的数据库链接,例如 handler.js 头部的
我们在执行node文件的时候,如果修改了node文件,每次执行都需要重新启动项目才行,为了方便我们可以使用nodemon来监听项目的改动,不再需要重复启动项目,这么方便的东西用起来能不香吗??...数据库 安装 npm i mongoose -S 完成安装之后我们需要在app.js里引入并且配置数据库 //app.js //引入数据库 const mongoose = require('mongoose...,如果遇到了不同源请求时,会先询问来自哪个源对源进行检查之后,做出响应。...const mongoose = require("mongoose"); const Scheme = mongoose.Schema; const ObjectId = mongoose.Types.ObjectId...的文件夹,创建index.js文件: const mongoose = require("mongoose"); const model = mongoose.model.bind(mongoose);
每次请求必须包括所有信息,不能依赖上下文信息。服务端不用保存会话信息,提升了简单性、可靠性、可见性。 缓存(Cache) 所有服务端响应都要被标为可缓存或不可缓存,减少前后端交互,提升了性能。...拿到路由分配的任务并执行 在 koa 中是一个中间件 为什么要用控制器 获取 HTTP 请求参数 Query String,如?...客户端发起非登录请求时,假如服务器给了 set-cookie,浏览器会自动在请求头中添加 cookie。 服务器接收请求,分解 cookie,验证信息,核对成功后返回 response 给客户端。...sha1Stringfalsemultipart是否支持多文件上传BooleantrueonFileBegin文件上传前的一些设置操作Functionfunction(name,file){} koa-json-error 在写接口时...简单的说,Mongoose就是对node环境中MongoDB数据库操作的封装,一个对象模型(ODM)工具,将数据库中的数据转换为JavaScript对象以供我们在应用中使用。
'Rose' } }); 如果你要log出全名,可以这么做: console.log(axl.name.first + ' ' + axl.name.last); // Axl Rose 但是每次都这么拼接实在太麻烦了...选项 Schema有很多可配置选项,你可以在构造时传入或者直接set,选项较多,暂不学习整理。...在Mongoose中,意味着你可以在里嵌套另一个schema。...validate()钩子其实就是 pre(‘save’)钩子,这意味着所有pre(‘validate’)和 post(‘validate’)钩子都会在 pre(‘save’)之前调用。...= require('mongoose') const Schema = mongoose.Schema; const personSchema = Schema({ _id:Schema.types.ObjectId
看到B站上全栈之巅-Node.js+Vue.js全栈开发深度爱好者和实践者,感觉Johnny博主的系列视频讲解得不错,其中看到一个视频是1小时搞定NodeJs(Express)的用户注册、登录和授权,介绍了在...插件,它是用于在VSCode中发起http请求的一个插件,可以通过代码的方式发起http请求,包括get、post、put去请求。...类似于Postman,Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。其中Rest-Client插件在VSCode中如下图所示: ?...\server.js开启服务端,服务器会在对应的3001端口上监听客户端的http请求,然后打开test.http文件,在相应的登录、注册、查询所有用户的请求,使用Ctrl+鼠标单击按住Send Request...,发起对应的get、post请求,其中登录的请求在VSCode中如下图所示: ?
}) #mongoose基本使用 #mongoose的几个新的对象 在MongoDB中,多个Document可以组成Collection(以下简称集合),多个集合又可以组成数据库。...#创建model(集合) let personModel= mongoose.model('person', personSchema); person:数据库中的集合名称,当我们对其添加数据时如果person...已经存在,则会保存到其目录下,如果未存在,则会创建person集合,然后在保存数据。...MongoDB在命令行中的使用方法一样 //查询时只显示name personModel.find({}, {name: 1, _id: 0}, (err,data)=>{ if(!...和 age 从第1开始 每次查询2条 if(!
在项目根目录下输入以下命令导入 mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件 ?...User.updateOne({查询条件}, {要修改的值}).then(result => console.log(result)) // 更新多个 User.updateMany({查询条件}, {要更改的值...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败则插入失败。...24, //最小数值 max: 80 //最大数值 }, publishDate: { type: Date, // 默认值,没有插入信息时默认显示的值...type: String }, // 1、使用ID将文章集合和作者集合进行关联 author: { type: mongoose.Schema.Types.ObjectId
这两天跟着B站的Johnny老师学习NodeJs+Express+MongoDB相关的知识点,前后跟着做了1小时搞定NodeJs(Express)的用户注册、登录和授权、Element UI + NodeJs...http请求。...然后在VSCode中打开终端,使用cnpm命令安装express和MongoDB的数据库模块mongoose和cors(支持跨域),命令如下: cnpm install express cnpm install...}) 在NodeJs中对MongoDB数据库进行增删改查 连接MongoDB数据库 新建一个MongoDB数据库模型,命名为express-test const mongoose = require('...// 修改产品和PUT请求 // patch表示部分修改,put表示覆盖 //app.patch(); app.put('/products/:id', async function(req,res)
也就是说,我们现在可以为 API 创建一些路由,并使用这些方法来处理请求。...这里,我们需要更改 Todo 的 状态 ,那么在发送到服务器之前我们只需要选择所需的属性即可。...Todo not saved") } setTodos(data.todos) }) .catch(err => console.log(err)) } 当发送表单时,...我们用 addTodo() 向服务端发送请求。...它们都接受参数,发送请求并得到响应,然后它们会检查请求是否成功并作相应处理。
User.updateOne({查询条件}, {要修改的值}).then(result => console.log(result)) // 更新多个 User.updateMany({查询条件}, {要更改的值...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败则插入失败。...使用id对集合进行关联 使用populate方法进行关联集合查询 // 关联集合 const mongoose = require('mongoose'); // 连接数据库 mongoose.connect...type: String }, // 1、使用ID将文章集合和作者集合进行关联 author: { type: mongoose.Schema.Types.ObjectId...时, 实现用户删除功能
在 GraphQL 中,有如下几种标量类型:Int, Float, String, Boolean, ID ,分别表示整型、浮点型、字符串、布尔型以及一个ID类型。...根据本例中的 Schema 定义,我们在查询 search时data的参数必须为 { term: "Deepwater Horizon" } 别名(Alias) ?...Resolver 对应着 Schema 上的字段,当请求体查询某个字段时,对应的 Resolver 函数会被执行,由 Resolver 函数负责到数据库中取得数据并返回,最终将请求体中指定的字段返回。...当请求体查询movie时,同名的 Resolver 必须返回Movie类型的数据。当然你还可以单独为name字段使用独立的 Resolver 进行解析。...const mongoose = require('think-mongoose');module.exports = [mongoose(think.app)]; 接下来,在 adapter.js 中配置数据库连接
在本文中,我们将构建一个工具来监视在一个简单的Node.js应用程序应答HTTP请求时在MongoDB中花费多少时间。...我们来重写一些方法 如果我们不想更改应用程序代码,则需要更改其依赖项的代码。...让我们编写一个包装函数来执行返回一个promise的函数: 每次调用方法时,我们都会为每个性能度量创建一个唯一的ID。这将确保两个定时操作之间不发生碰撞。...为了跟踪HTTP请求,我们将从Node.js core覆盖类Http.Server上的emit方法: 现在,对于Http.Server的所有实例,当使用请求事件调用emit方法时,会创建一个新的context...由于我们的Async Hook会将这个context传播给子资源,因此每次调用AsyncHooks.executionAsyncId()都会返回一个有效的context映射关键字。
models.ts:Mongoose 模型定义文件。 routes.ts:Express 路由定义文件。 在 models.ts 文件中定义 Mongoose 模型。...例如,我们创建一个 User 模型: import mongoose from 'mongoose'; const userSchema = new mongoose.Schema({ name:...('User', userSchema); 在 routes.ts 文件中定义 Express 路由。...以下是一些示例请求: 接口测试 获取用户列表:GET http://localhost:3000/users 创建用户:POST http://localhost:3000/users,请求体为 JSON...获取单个用户:GET http://localhost:3000/users/{id} 更新用户:PATCH http://localhost:3000/users/{id},请求体为 JSON 格式的更新数据
领取专属 10元无门槛券
手把手带您无忧上云