引言 Web API 已经在最近几年变成重要的话题,一个干净的 API 设计对于后端系统是非常重要的。...具体了解RESTful API前,让我们先来看一下什么是REST。 REST的全称是Representational state transfer。...分层系统(Layered System) 按需代码(Code-On-Demand) 看完了 REST 的六个约束,下面让我们来看一下行业内对于RESTful API设计最佳实践的总结。...简单的说,Mongoose就是对node环境中MongoDB数据库操作的封装,一个对象模型(ODM)工具,将数据库中的数据转换为JavaScript对象以供我们在应用中使用。...项目的源码已经开源,地址是https://github.com/Jack-cool/rest_node_api。需要的自取,感觉不错的话麻烦给个 star!!
本篇文章中我们将使用 ServerLess、MongoDB Atlas cloud 与 Node.js 的结合来快速构建一个 REST API,无论你是前端工程师还是后端工程师,只要你掌握一些 JavaScript...Serverless REST API 开发最佳实践 带着上面提出的几点问题,本节将对这个业务逻辑进行重构,开发一个 REST API 最佳实践。 什么是 REST API?...本节中我们将用到的是 GET、POST、PUT、DELETE 四个表示操作方式的动词,分别对应用于获取资源、新建资源、更新资源、删除资源。...以下是我们将要完成的 REST API 规划,包含四个 CRUD 操作 CRUD API Routes Description POST /books 增加一本书 GET /books 获取所有书籍列表...本文中在数据存储方面结合了 MongoDB Alats Cloud 免去了数据库的搭建、维护工作,现在只要你掌握一些 JavaScript 基础语法通过本文的讲解就可轻松的完成一个 REST API,这是多么
// mongoose.Schema() 是一个构造函数,要new一个实例对象 //2、设定集合规则 const courseSchema = new mongoose.Schema({ name...= mongoose.model ('Course', courseSchema); //第一个参数是集合名称,第二个是集合规则。...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败则插入失败。...:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema = new mongoose.Schema... .catch((error) => { // 获取错误信息对象 const err = error.errors; // 循环错误信息对象
下面开始本文内容: 一、GraphQL介绍 GraphQL 是 Facebook 开发的一种 API 的查询语言,与 2015 年公开发布,是 REST API 的替代品。...获取多个资源,只用一个请求; 典型的 REST API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据。...ID: ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。 ID 类型使用和 String 一样的方式序列化;然而将其定义为 ID 意味着并不需要人类可读型。...) => { mongoose.connect(DB_PATH) }) // 连接失败 mongoose.connection.on('error', err =...总结 GraphQL 是一种 API 的查询语言,是 REST API 的替代品。 GraphQL 可以使用一个请求,获取所有想要的数据。
编码前的准备工作:第三方库和rest-client插件安装 我的nodejs版本是:v10.16.0, npm版本是:6.9.0,cnpm的版本是6.1.0,express的版本是4.16.1,由于npm...g nodemon cnpm install jsonwebtoken cnpm install bcryptjs cnpm install mongoose 另外,还需要在VSCode中安装扩展的rest-client...其中Rest-Client插件在VSCode中如下图所示: ?...res.send({ user, token }) }) // 中间件:验证授权 const auth = async (req, res, next) => { // 获取客户端请求头的...split(' ').pop() const tokenData = jwt.verify(rawToken, SECRET) // console.log(tokenData) // 获取用户
// mongoose.Schema() 是一个构造函数,要new一个实例对象 //2、设定集合规则 const courseSchema = new mongoose.Schema({ name...= mongoose.model ('Course', courseSchema); //第一个参数是集合名称,第二个是集合规则。...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败则插入失败。...:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema = new mongoose.Schema....catch((error) => { // 获取错误信息对象 const err = error.errors; // 循环错误信息对象
的查询语言,与 2015 年公开发布,是 REST API 的替代品。...获取多个资源,只用一个请求; 典型的 REST API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据。...ID: ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。 ID 类型使用和 String 一样的方式序列化;然而将其定义为 ID 意味着并不需要人类可读型。...) => { mongoose.connect(DB_PATH) }) // 连接失败 mongoose.connection.on('error', err =...总结 GraphQL 是一种 API 的查询语言,是 REST API 的替代品。 GraphQL 可以使用一个请求,获取所有想要的数据。
2.第二部分(也就是这篇):用 Express 实现后端 REST API,并使用 MongoDB 进行数据存储。...下载并安装好之后,新打开一个终端(命令控制台),运行以下命令打开数据库(Windows 用户可以搜索 mongo.exe 并打开): $ mongod 2019-12-22T18:10:25.285+0800...JavaScript 对象来描述我们需要的数据结构和对应的数据类型,除了我们熟知的像 String、Number 等数据类型外,ObjectId 是一个特殊的数据类型,我们用它来定义我们的单个 MongoDB...完成 API 路由 路由是 Express 的关键组成部分,也是客户端与服务器进行交互的入口,在 Express 路由中接受两个参数:Request 和 Response,一个用来获取客户端的请求,一个用来发送给客户端服务器的响应...这里操作 manufacturer 的前五个路由的功能如下: •GET /manufacturers 获取所以的制造商(manufacturers)•GET /manufacturers/:id 获取单个制造商
的API接口请求利器 - rest client,这篇视频快速的讲解了VSCode中Rest-Client的使用,具体的还可以看VSCode中Rest-Client的使用教程。...建立好上述开发环境后,打开VSCode,在一个目录中新建一个EXPRESS-TEST的文件夹,用于存放项目文件,新建一个server.js文件用于存放代码,test.http存放rest-client编写的接口用于测试客户端的...mongoose cnpm install cors 使用Express启动http服务 Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能...}) 在NodeJs中对MongoDB数据库进行增删改查 连接MongoDB数据库 新建一个MongoDB数据库模型,命名为express-test const mongoose = require('...编写http请求 VScode中的Rest-Client有一个规定,就是http请求文件必须以http为后缀,比如说tets.http文件。
它是独立于语言之外的软件,可以通过API去操作它。 常见的数据库软件有:mysql、mongoDB、oracle。 ?...1.5 数据库相关概念 在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据)。...mongoDB数据库软件中可以建立多个数据库 collection 集合,一组数据的集合,可以理解为JavaScript中的数组 document 文档,一条具体的数据,可以理解为JavaScript中的对象...field 字段,文档中的属性名称,可以理解为JavaScript中的对象属性 1.6 Mongoose第三方包 使用Node.js操作MongoDB数据库需要依赖Node.js第三方包mongoose...因为服务器默认是开启的,所以在启动之前要先停止MongoDB 如果在命令行窗口启动数据库失败,出现以下情况: ? 那么需要在菜单栏搜索命令行并右击鼠标以管理员身份运行 ?
mongoose Mongoose:一款为异步工作环境设计的 MongoDB 对象建模工具。...success") }) // 链接失败 mongoose.connection.on("error", function() { console.log("MongoDB connected...mongoose.model() 方法将模式“编译”为模型。模型就可以用来查找、创建、更新和删除特定类型的对象。 注:MongoDB 数据库中,每个模型都映射至一组文档。...skip表示跳过多少个。举个例子,页码(page),每页条数(pageSize),如果page=1,pageSize=10,就是要取前10条数据,那skip就应该 等于0,表示跳过0条。...mongoose 获取内嵌数组的长度,有没有更好的办法,或者说是既能返回总数也能进行分页? mongodb我也是现学现卖,查询语句写的可能不是最优的,仅作参考。
定义一个具有给定名称的虚拟属性,该名称可以获取/设置这个路径 索引 你可以用 schema 类型选项声明 MongoDB 的索引。 index: 布尔值,是否在属性中定义一个索引。...如果连接失败,尝试用127.0.0.1代替localhost。...对象: mongoose.connect(uri, options); 这里我列举几个在日常使用中比较重要的选项,完整的连接选项看这里 bufferCommands:这是 mongoose 中一个特殊的选项...在 mongoose 中有两种指定方式,字符串指定和对象形式指定。 字符串指定时在排除的字段前加 - 号,只写字段名的是包含。...selectFields) .populate(populateStr); 最后 到这里本篇文章也就结束了,这里主要是结合我平时的项目(https://github.com/Jack-cool/rest_node_api
也需要一个odm工具来方便更好的操作。而mongoose就是i 一个良好的工具。 mongoose是一个优雅的nodejs对象文档模型。它是由关系型数据库的思想去应用到非关系型数据库。...; const conn = mongoose.connection; conn.on("error", () => console.error("连接数据库失败")); conn.once("open...", async () => { // 2.定义一个Schema - Table const Schema = mongoose.Schema({ category: String..., name: String }); // 3.编译一个Model, 它对应数据库中复数、小写的Collection const Model = mongoose.model...useNewUrlParser: true }); const conn = mongoose.connection; conn.on("error", () => console.error("连接数据库失败
初始化工程 $ egg-init 选择 Simple $ npm i $ npm run dev 浏览器访问 http://localhost:7001 此时服务已经建立 设计API egg Rest...API 接口规范 | Method | URL | File path | Controller name | | - | - | - | - | | GET | /api/{objects}[?...POST insert data {"name":"admin123","pass":"123","status":1,"time":"1325472736"} 数据模型 此处先定义用户 User 对象...每一个 User 对象需要包含 用户名、密码、邮箱、公司 等信息, users.js 文件内容如下: // app/model/user.js module.exports = app => {...const mongoose = app.mongoose; const UserSchema = new mongoose.Schema({ email : {type: String,
mongoose的相关概念 mongoose中提供了几个新的对象: + Schema(模式对象):Schema对象定义约束了数据库中的文档结构 + Model:Model对象作为集合中的所有文档的表示...监听MongoDB数据库的连接状态:在mongoose对象中,有一个属性叫做connection,该对象表示的就是数据库连接, 通过监视该对象的状态,可以来监听数据库的连接与断开 mongoose.connection.once...监听各种状态 let db = mongoose.connection; db.on('error', () => { console.log("连接失败!")...err) { console.log("插入成功") } else { throw err; } }); */ // 4.2 查 //第二个对象的第一个参数是是否错误...err) { console.log(count); } }); 遇到问题可以查看api MongoDB教程 mongoose的API文档
Express.js 是用于开发 Node.js REST API 的优秀框架,但是它并没有为您提供有关如何组织 Node.js 项目的任何线索。 虽然听起来很傻,但这确实是个问题。...我在构建的每个 Node.js REST API 服务中都使用了下面这个结构,让我们了解下每个组件的功能。...现在创建一个用户的简单 Node.js API 端点,也许是调用第三方服务,也许是一个分析服务,也许是开启一个电子邮件序列。...对象中。...有一个 config/index.ts 文件,其中 NPM 包 dotenv 加载 .env 文件,然后我使用一个对象存储变量,因此我们具有结构和代码自动完成功能。
mongoose Mongoose:一款为异步工作环境设计的 MongoDB 对象建模工具。...") }) // 链接失败 mongoose.connection.on("error", function() { console.log("MongoDB connected error")...mongoose.model() 方法将模式“编译”为模型。模型就可以用来查找、创建、更新和删除特定类型的对象。 注:MongoDB 数据库中,每个模型都映射至一组文档。...skip表示跳过多少个。举个例子,页码(page),每页条数(pageSize),如果page=1,pageSize=10,就是要取前10条数据,那skip就应该 等于0,表示跳过0条。...mongoose 获取内嵌数组的长度,有没有更好的办法,或者说是既能返回总数也能进行分页? 订单是在数据中库存了的,没有展示,收货地址也只有增加。这两处都可以扩展增删改查的功能。
数据库的所有操作都是异步操作 1.使用create方法创建文档 通过回调函数的方法获取异步API // 向集合中插入文档 Course.create({ name: 'JavaScript',...mongodb提供的API也支持promise对象 ? ?...// 根据条件查找文档 Course.findOne({name: 'node.js基础'}).then(result => console.log(result)) 返回一个对象 ?...上面的代码表示的是 跳过前两条数据 并且只保留三个数据 ?...mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。
console.log(result)) // 根据年龄字段进行降序排列 // User.find().sort('-age').then(result => console.log(result)) // 查询文档跳过前两条结果...deleteMany 多个 第一个条件为空 默认更新所有(慎用) // 引入mongoose第三方模块 用来操作数据库 const mongoose = require('mongoose'); //...updateMany 多个 第一个条件为空 默认更新所有 // 引入mongoose第三方模块 用来操作数据库 const mongoose = require('mongoose'); // 数据库连接...('数据库连接成功')) // 连接失败 .catch(err => console.log(err, '数据库连接失败')); // 创建集合规则 const userSchema = new mongoose.Schema...age: 10, category: 'c1ss', author: 'bd'}) .then(result => console.log(result)) .catch(error => { // 获取错误信息对象
对象,该对象形如 xxx:yyyy , /xxx是一个字符串,定义了属性,yyy是一个Schema.Type,定义了属性类型 }); 1.3 什么是Schema.Type Schema.Type...,相关内容请查看NodeJS-API 1.6 关于Mixed Schema.Types.Mixed是Mongoose定义个混合类型,该混合类型如果未定义具体形式。...,第二个参数是更新的对象,但不能更新主键,这就是为什么要删除主键的原因。 ...验证是在一个Document被保存时默认启用的,除非你关闭验证 验证是异步递归的,如果你的SubDoc验证失败,Document也将无法保存 验证并不关心错误类型,而通过ValidationError...,err是验证失败的错误信息 } }); 7.2 验证失败 如果验证失败,则会返回err信息,err是一个对象该对象属性如下 err.errors
领取专属 10元无门槛券
手把手带您无忧上云