在迷你全栈电商应用实战系列的第二篇教程中,我们将通过基于 Node.js 平台的 Express[1] 框架实现后端 API 数据接口,并且将数据存储在 MongoDB[2] 中。...第一部分:用 Vue 搭建前端项目的骨架,实现基于嵌套、动态路由的多页面跳转。2.第二部分(也就是这篇):用 Express 实现后端 REST API,并使用 MongoDB 进行数据存储。...接着我们在我们的 app.js 文件中导入 mongoose ,并且通过 mongoose 提供的接口连接我们的 MongoDB 数据库: // ... const mongoose = require...(mongoose); const ObjectId = mongoose.Schema.Types.ObjectId; const productSchema = Schema({ id: ObjectId...我们还可以看到,在我们的 productSchema 中,manufacturer 数据结构我们定义了一个 ref 属性,这是 MongoDB 为我们提供的类似关系数据库的外键功能,允许我们创建一对多的数据文档
这些模块可以将日志存储在不同格式或级别的文件中。我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序中的 API 日志记录。...那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 中的插件是什么? 在 Mongoose 中,模式是可插入的。...插件就像一个函数,你可以在模式中使用它,并在模式实例上一次次地重用。 Mongoose 还提供全局插件,你可以将其用于所有模式。...这是我们的模型:models/log.js const mongoose = require('mongoose') const Schema = mongoose.Schema const { ObjectId...你还可以通过在架构模型中初始化它来将其用于特定架构。 const mongoose = require('mongoose') mongoose.plugin(require('.
篇 Node(server) React(client) MongoDB(database) Typescript Todolist-database 篇(Cloud MongoDB) Todolist-client...yarn add typescript -g 安装 express 和 MongoDB 依赖和他们的 @types yarn add express cors mongoose yarn add...-D @types/node @types/express @types/mongoose @types/cors 安装用来编译 Typescript 的concurrently 和 nodemon...3.3 API controllers 现在我们在 controller 中添加几个 todolist 相关的方法。...app.ts import express, { Express } from 'express'; import mongoose from 'mongoose'; import cors from
安装完成上述指令之后,我们可以检查一下安装的express是否能用 express --version 接着我们就可以创建项目了,在创建项目的时候可以先express -h来查看一下,express命令的参数...useUnifiedTopology: true }); 设置跨域 在开发中,我们采用的都是前后端分离的状态,在本地的开发环境中我们无法避免的会遇到跨域[3]的情况,我们这里设置允许所有的源访问 app.use...实际上在真正的开发环境中,如果我们这么设置允许所有的的源都可以访问会有很多问题,我们可以使用cors[4]来代替它 当然如果在生产中我们采用nginx部署之后,就不存在跨域了?...const mongoose = require("mongoose"); const Scheme = mongoose.Schema; const ObjectId = mongoose.Types.ObjectId...}; model 在项目的根目录下创建model的文件夹,创建index.js文件: const mongoose = require("mongoose"); const model = mongoose.model.bind
:javascript复制代码const express = require('express'); const mongoose = require('mongoose'); const bodyParser...= require('body-parser'); const app = express(); const port = 3000; // 连接MongoDB数据库 mongoose.connect...注意:实际中应使用加密存储密码 referralCode: String, // 邀请码 referrals: [{ type: mongoose.Schema.Types.ObjectId...在实际应用中,必须确保所有敏感信息的安全处理。性能优化:对于大量用户和订单,需要优化数据库查询和服务器性能。业务逻辑:示例代码未实现完整的业务逻辑,如排队免单算法、奖励机制等。...前端交互:前端示例代码非常基础,实际中需要更复杂的用户交互和界面设计。测试:在实际部署之前,需要进行全面的测试,包括单元测试、集成测试、性能测试等。
非关系型数据库的解决思路: 在文章的Collection中增加一个SubCollection,SubCollection中可以存放用户信息,如用户名,只要有用户喜欢了文章,在这篇文章的文档中的子文档下插入一条记录即可...'); mongoose.connect('mongodb://127.0.0.1:27017/blog'); 定义一个Schema(也就是Mongodb中的Collections集合),更多字段类型,...Mongoose高级用法 关联关系的建立 大家会发现dhHelper中userSchema和articleSchema是有对应关系的(具体的说是“一对多的关系”),那么这个对应关系是怎么设计的呢?...说到这里,我们先来说一个其他的问题:“关于Mongodb中两个集合之间的对应关系,设计呢?”...在articleSchema中增加一个字段_user,类型为Schema.Types.ObjectId,关联User: _user: { type: Schema.Types.ObjectId,
在本教程中,我们将在服务器和客户端使用 TypeScript、React、NodeJS、Express 和 MongoDB 从头开始构建一个 Todo 应用程序。 我们从设计 API 开始。...用 NodeJS, Express, MongoDB 和 TypeScript 设计 API 启动 如果你是新手,可以看看《TypeScript 实用指南》,或者从《如何用 Node JS、Express...yarn add express cors mongoose 我们还需要安装它们的类型作为开发依赖项,帮助 TypeScript 编译器理解这些包。...所以,我们在下一节中解决这个问题。 创建服务器 在创建服务器之前,我们需要在 nodemon.json 加一些环境变量来保存 MongoDB 的凭据。...就是说,现在如果我们能成功连接 MongoDB,服务器就会启动,否则,会抛出错误。 我们现在已经通过 Node、Express、TypeScript 和 MongoDB 完成 api 的构建。
1.2 数据库分类 数据库主要分成两种: 关系型数据库 • MySQL、Oracle、DB2、SQL Server …… 关系数据库中全都是表 非关系型数据库 • MongoDB、Redis...2、在 C 盘根目录下创建 data 文件夹,在 data 下创建 db 文件夹,该文件用于存放 MongoDB 的文件,在 data 下创建 db 文件夹 ?...文档之间的关系: 一对一:在 MongoDB 中可以通过内嵌文档的形式来体现出一对一的关系。...:也可以通过内嵌文档来映射一对多的关系。...在多的表中存放一的id。
使用Mongoose构建服务 该方式需要在本地安装MongoDB才可以 使用 TypeScript、Express、Mongoose 和 pnpm 可以快速构建后端服务,并实现增删改查以及列表查询的功能...express mongoose pnpm install --save-dev typescript ts-node nodemon @types/express @types/mongoose...models.ts:Mongoose 模型定义文件。 routes.ts:Express 路由定义文件。 在 models.ts 文件中定义 Mongoose 模型。...('User', userSchema); 在 routes.ts 文件中定义 Express 路由。...app.ts 文件中创建 Express 应用程序,并配置中间件和路由: import express from 'express'; import mongoose from 'mongoose';
,最后决定使用的技术栈就是 koa+typescript+mysql+mongodb来搭建项目。...当然,前面说的都是虚的,其实真正吸引我的是koa通过es6的写法,利用async函数,解决了express.js中地狱回调的问题,并且koa不像express一样自带那么多中间件,对于一个私有项目来说,...,适合自己的才是最好的 Mysql MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System...:关系数据库管理系统)应用软件之一 Mongodb 为什么用了mysql还要用mongodb呢?...不过这个项目除了使用mysql,也还有用到mongo,接下来看看mongodb怎么用 使用mongoose作为mongodb的中间件 // mongoose入口 import mongoose from
使用Mongoose构建服务该方式需要在本地安装MongoDB才可以使用 TypeScript、Express、Mongoose 和 pnpm 可以快速构建后端服务,并实现增删改查以及列表查询的功能。...mongoosepnpm install --save-dev typescript ts-node nodemon @types/express @types/mongoose创建 TypeScript...models.ts:Mongoose 模型定义文件。routes.ts:Express 路由定义文件。在 models.ts 文件中定义 Mongoose 模型。...('User', userSchema);在 routes.ts 文件中定义 Express 路由。...app.ts 文件中创建 Express 应用程序,并配置中间件和路由:import express from 'express';import mongoose from 'mongoose';import
您可以按照顺序阅读 全栈 Todolist-server 篇 Node(server) React(client) MongoDB(database) Typescript Todolist-database...篇(Cloud MongoDB) Todolist-client 篇(React Typescript) 0、注册使用 MongoDB Atles www.mongodb.com/cloud/atlas..."MONGO_PASSWORD": "your-password", "MONGO_DB": "your-db-name" } } username 和 password 在...app.ts import express, { Express } from 'express'; import mongoose from 'mongoose'; import cors from...: true }; mongoose.set('useFindAndModify', false); mongoose .connect(uri, options) .then(()
不要求文档有相同的结构,在一个collection文档中不必具有相同的fileds,对于单个field在一个collection中的不同文档中可以是不同的数据类型 实例方法methods documents...支持secondary indexes,在mongoose中,我们在Schema中定义索引,索引字段级别和shcema级别 var animalSchema = new Schema({ name:...六、文档-Documents Mongoose document代表着MongoDB文档的一对一映射。每个document都是他的Model的实例。...在Mongoose中,意味着你可以在里嵌套另一个schema。...字段为 ObjectID 数组,ref 选项告诉mongoose 在填充的时候使用哪个 model,上面的例子就是指 Story 的 model。
/mongodb-create-database.html[2] ---- 在我们的 node 开发中,MongoDB 是支持 JavaScript 语言的,mongoose[3]就是 node.js...2. mongoose 2.1 安装 npm i mongoose -S 2.2 使用 在 node.js 里采用的是CommonJS[4]的规范,需要我们采用 require 的方法来引入需要的包。...:'user'}) 在 mongoose 中,提供了 Schema 的类,我们可以在实例化的时候先定义mongoose.Schema,以免后续总是要出现丑陋的new mongoose.Schema()。...支持的基本类型 String Number Date Buffer Boolean Mixed ObjectId Array 其中Mixed和ObjectId是 mongoose 特有的。...ObjectId是一种特殊类型,用于唯一标识符,可以理解为主键,一般使用mongoose.Types.ObjectId。
MongoDB简介 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。...GridFS 常用的使用场景 如果你的文件系统在一个目录中存储的文件的数量有限,你可以使用 GridFS存储尽可能多的文件。...一个集合是 chunks, 用于存储文件内容的二进制数据;一个集合是 files,用于存储文件的元数据。...当然也可以定义不同的 buket 名字,甚至在一个数据库中定义多个 bukets,但所有的集合的名字都不得超过 MongoDB 命名空间的限制。...('bluebird') const { isString } = require('lodash') const ObjectId = mongoose.Types.ObjectId let bucket
CORS 是用于提供Connect/Express中间件的node.js程序包,可用于启用具有各种选项的CORS。 5....Passport.js 是一个简单的、非侵入式的 Node.js 身份验证中间件,它可以集成到任何基于 Express.js 的 web 应用中 6....它几乎可以覆盖到任何你想用的用例,在 Github 上的文档也可以帮你分分钟熟悉它的用法。 12....Mongoose是mongoDB的一个对象模型库,封装了mongoDB对文档的一些增删改查等常用方法,让nodejs操作mongoDB数据库变得更容易。...Jest 是由 Facebook 推出的一个前端测试框架,具有许多非常好的特性,譬如执行速度快、API友好、自动监控、Snapshot、测试覆盖率、Mock等各种特性,并且适用于Babel、TypeScript
mongoose 的 model ,不过这里获取了也没关系 filter: /\.js$/, excludeDirs: /^\....的区别 Mysql:关系型数据库,用于存储表格形式,格式规整的数据 Mongodb:文件数据库,用于存储文件,格式零散的数据。...Session原理简单、易于学习 用户信息存储在服务端,可以快速封禁某个登录的用户 但是: 占用服务端内存、多进程、多服务、跨域传递cookie 4-3 介绍JWT登录 JWT – Json Web...以后访问接口,都在header中带上token。 优缺点 优点:不占用服务器内存、多进程,多服务器,不受影响、不受跨域限制 缺点:无法快速封禁登录的用户。...,就不容易看出来一些表的关联关系,如果我们在新建表的时候就去设置外键表的关联,首先表结构一目了然,且在新增(外键关联的主键没有值得时候)会有错误提示,删除主键表的时候,关联的主键内容也会删掉。
依赖注入最大的作用是代码解耦,依赖的对象根据不同的情况可以有多种实现,如单元测试的时候可以在不改业务代码的情况下将依赖的对象换成 Mock 数据。...类型系统是后端开发很重要的一环,Nest是使用TypeScript实现的框架,因此原生就支持TypeScript,而且还大量使用了注解,熟悉 Spring 的朋友会感到十分亲切。...Module、Controller和Provider的关系见下图: Controller和Provider都在Module注册,容器会将Provider注入到Controller中,Module之间可以相互引用...连接数据库 例子中使用mongoose连接和操作本地MongoDB数据库。为了更方便使用,Nest提供了@nestjs/mongoose包,对mongoose包装了一层,使其更符合Nest的使用风格。...操作数据库的步骤如下: app.module中定义连接的数据库:MongooseModule.forRoot('mongodb://localhost/nest') cat.schema中定义 Schema
应用,大致的技术选型如下: Ejs Bootstrap Angular-Chart Mongoose Redis Sokect.io 这是一个简单的服务端多页应用示例,使用 Ejs 模板引擎进行页面渲染...项目目录结构 在 Nuxt 的目录结构中,服务端引入的同构代码放在.nuxt 目录中,是 Webpack 打包后的代码文件,因此如果服务端不使用特殊的语法,完全不需要 Backpack 配置。...此项目为了支持服务端 TypeScript 语法,使用 Backpack 对服务端代码进行构建(不影响同构部分代码的构建,同构代码在 Nuxt 里是通过读取文件的方式获取)。...配置文件 运行脚本设计 在package.json中的配置脚本如下: "build": "cross-env NODE_ENV=production nuxt build && backpack build...Ejs 模板引擎 JQuery JQuery 内置的$.ajax Bootstrap(可选) 客户端和服务端都不需要 Webpack 配置 对于 Express 新手而言,可以先尝试多页应用 + MongoDB
---- koa2 和 express express 是非常优秀的框架,koa2 比 express 更加简单,社区也很完善。...Mongodb 和 Mongoose Mongodb Mongodb 是 web 程序中最常见的 NoSQL 数据库。...Mongoose Mongoose 是 node.js 中操作 Mongodb 数据库的模块。...MySQL 和 Mongodb 区别 MySQL 是关系型数据库,Mongodb 是文件数据库 前者用于储存表格形式,格式规整的数据,后者用于储存文件,格式零散的数据。...场景 作品信息,用户信息,适合存储在 MySQL 中 作品的内容 JSON 数据,适合存储在 Mongodb 中 Redis 大型网站,复杂业务场景,肯定会用到缓存。
领取专属 10元无门槛券
手把手带您无忧上云