yarn add express cors mongoose 我们还需要安装它们的类型作为开发依赖项,帮助 TypeScript 编译器理解这些包。...yarn add -D @types/node @types/express @types/mongoose @types/cors 现在,TypeScript 不会再对你提示错误——它将使用这些类型来定义我们刚刚安装的库...就是说,现在如果我们能成功连接 MongoDB,服务器就会启动,否则,会抛出错误。 我们现在已经通过 Node、Express、TypeScript 和 MongoDB 完成 api 的构建。...用 React 和 TypeScript 创建客户端 构建 为了创建一个新的 React 应用,我将会使用 create-react-app ——你可以用其他你想用的方法。...所以,在终端运行以下代码: npx create-react-app my-app --template typescript 然后,为了能获取远程数据安装 Axios 库。
使用Mongoose构建服务 该方式需要在本地安装MongoDB才可以 使用 TypeScript、Express、Mongoose 和 pnpm 可以快速构建后端服务,并实现增删改查以及列表查询的功能...express mongoose pnpm install --save-dev typescript ts-node nodemon @types/express @types/mongoose...例如,我们创建一个 User 模型: import mongoose from 'mongoose'; const userSchema = new mongoose.Schema({ name:...删除用户:DELETE http://localhost:3000/users/{id} 请注意,这只是一个简单的示例,实际项目中可能需要更多的验证、错误处理和安全性措施。...res: Response) => { try { const { title, desc } = req.body; const todoList = await TodoList.create
使用Mongoose构建服务该方式需要在本地安装MongoDB才可以使用 TypeScript、Express、Mongoose 和 pnpm 可以快速构建后端服务,并实现增删改查以及列表查询的功能。...mongoosepnpm install --save-dev typescript ts-node nodemon @types/express @types/mongoose创建 TypeScript...例如,我们创建一个 User 模型:import mongoose from 'mongoose';const userSchema = new mongoose.Schema({ name: {...删除用户:DELETE http://localhost:3000/users/{id}请注意,这只是一个简单的示例,实际项目中可能需要更多的验证、错误处理和安全性措施。...res: Response) => { try { const { title, desc } = req.body; const todoList = await TodoList.create
,最后决定使用的技术栈就是 koa+typescript+mysql+mongodb来搭建项目。...Typescript 网上特别多关于“为什么要用Typescript开发”,“Typescript开发的好处和坏处”,“为什么不用Typescript开发”等等的争论和文章,有兴趣的同学也可以去说道说道哈...js中没有的东西,譬如泛型接口抽象等等 良好的模块管理 强类型语音,个人感觉比js开发服务端项目更合适 有良好的错误提示机制,可以避免很多开发阶段的低级错误 约束开发习惯,使得代码更优雅规范 最后记住一点...() 说到这边,不得不提一句哈,就是路由可以引入装饰器写法,这样能减少重复工作和提高效率,有兴趣的同学可以看我上一篇博客哈。...,但是需要考虑的东西也是很多,而且因为很多插件都是第一次接触,所以整个项目实现的过程还是蛮坎坷的,基本上是那种摸石头过河。
/data(这里的 data 是新建需要新建 data 文件夹,在文件夹里创建 db 文件夹) 客户端 C:\MongoDB\bin mongo 注意: 如果出现在 windows 下出现小黑窗口闪退的情况...:'user'}) 在 mongoose 中,提供了 Schema 的类,我们可以在实例化的时候先定义mongoose.Schema,以免后续总是要出现丑陋的new mongoose.Schema()。...官网给的解释是: Mixed是一种无模式类型,"anything"随便什么都可以,一般使用Schema.Types.Mixed或者{}来表示。...2.5 ObjectId 一个 ObjectId 其实可以分割为四部分,即当前时间戳,当前主机的hash,当前进程id,自动增加的计数器,有了这几个基本上就可以保证它的唯一性了。...node 的开发习惯,callback中的第一个参数永远是错误信息,第二个参数是正确信息。
一、Node.js默认使用commonJs的模块化方案,TypeScript默认是ES6的模块化方案,两者有本质区别。.../(使用相对路径),暴露接口使用exports或者module.exports 2.TypeScript的 import * from url 的引入依赖,需要填写完整的相对路径,否则是找不到模块的...,暴露接口使用export . 3.Node中使用TypeScript需要下一些包去支持,比如express框架这些,还有一些支持内置对象的包: 4.github源码下载地址 "dependencies...ejs 的渲染数据在ejs文件中的格式有三种 1. 里面可以写任意代码 2. 里面写的代码最终会转义后再出现(推荐) 3. ...里面写的代码最终不会转义后就出现(不安全) 'index.ejs ' <!
这篇文章是基于我多年来在处理一些糟糕的 Node.js 项目结构、不好的设计模式以及无数个小时的代码重构经验的探索研究。...└───types # 对于 Typescript 的类型声明文件(d.ts) 以上不仅仅是组织 JavaScript 文件的一种方式......图片描述 因为有一天,您将希望在一个 CLI 工具上来使用您的业务逻辑,又或从来不使用。对于一些重复的任务,然后从 Node.js 服务器上对它自己进行调用,显然这不是一个好的主意。 ?...DI 或控制反转(IoC)是一种常见的模式,通过 “注入” 或通过构造函数传递类或函数的依赖关系,有助于代码的组织。...我从 W3Tech 的微框架中采用这种模式,但并不依赖于它们的包装。 这个想法是将 Node.js 的启动过程拆分为可测试的模块。
https://github.com/garronej/evt Inspect: 移动Web DevTools的“新标准”(英) 适用于macOS和Windows的开发人员工具,可检查和调试iOS设备上的...https://inspect.dev/ Mongoose 5.10新增乐观并发控制(乐观锁)(英) Optimistic concurrency核心思想是追踪文档的版本并在每次保存后增加版本,当在加载文档和保存文档之间...特性可以帮助缓解运动敏感人群的不适(英) 屏幕上的某些运动可能会对运动敏感的人产生影响,如眩晕,恶心等。...,错误修复将不再因违反准则而延迟,但与法律问题相关的错误修复除外。...Plugin System(英) 使用设计模式更好的设计代码结构 https://javascriptweekly.com/link/94726/web tools And codes Print.js
那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 中的插件是什么? 在 Mongoose 中,模式是可插入的。...插件就像一个函数,你可以在模式中使用它,并在模式实例上一次次地重用。 Mongoose 还提供全局插件,你可以将其用于所有模式。...步骤1:创建基本日志模式模型 让我们创建一个具有以下六个属性的基本日志模式: Action: 按照它的名称,这是 API 的一个动作过程,无论是 create、update、delete还是别的什么。..._diff, } return LogSchema.create(data) } } module.exports = plugin 在 Mongoose 中,有不同的钩子可用。...现在我们需要使用架构上可用的 init 和 save 方法。 this.isNew():如果你正在创建新文档,那么只需返回 next()中间件。
,由于我们基于 TypeScript ,所以选择了支持 TS 的包。...apolloServerOptions: { tracing: true, // 设置为true时,以Apollo跟踪格式收集和公开跟踪数据 debug: true, // 一个布尔值,如果发生执行错误...**(CORS,Cross-origin resource sharing)**,是W3C标准,是一种机制,它使用额外的HTTP头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源...使用 graphql 或 rest 端点时,实际上不必担心使用 CSRF 保护。对服务的请求应该是无状态的,并且不真正依赖Cookie或会话数据。...可以理解为 {id: 1, name: 'jack'} 项目启动 npm run dev 在浏览器中输入 http://127.0.0.1:7001/graphql 出现如下界面说明已经 graphql
创建集合 创建集合分为两步,-是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。...实际在数据库中产生的集合名为courses 2.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...course.save(); 方法2 和数据库相关的所有操作都是异步操作 创建文档 插入数据 Course.create({ name: 'JavaScript', author: '...create方法插入数据 Post.create({ title: 'aaa', age: 68, category: 'javascript', author: 'db...mongoose.model('Post', postSchema); // 插入文档数据 // User.create({ // name: 'xc' // }).then(result =
序列文章 从项目中由浅入深的学习vue,微信小程序和快应用 (1) 从项目中由浅入深的学习react (2) 从项目中由浅入深的学习typescript (3) 前言 node.js的出现前端已经可以用...:解析router的中间件 mongoose :基于mongdodb的数据库框架,操作数据 nodemon:后台服务启动热更新 3.项目目录 ├── app...patch方法 delete delete方法 prefix 配置公共路由路径 use 将路由分层,同一个实例router中可以配置成不同模块 ctx.params 获取动态路由参数 fs 分割文件 7.mongoose...主要API API 作用 Schema 数据模式,表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力 model schema生成的模型,可以对数据库的操作...model的操作database方法 API 方法 create/save 创建 remove 移除 delete 删除一个 deleteMany 删除多个 find 查找 findById 通过id
不这么做你可能会经常 收到看似毫无原因的 “connection closed” 错误。...next() 执行错误时,中间件执行立即停止。...但是我们有特殊的 post 中间件技巧处理这个问题 —— 错误处理中渐渐,它可以在出错后执行你指定的代码。 错误处理中间件比普通中间件多一个 error 参数,并且 err 作为第一个参数传入。...而后错误处理中间件可以让你自由地做错误的后续处理 const schema = new Schema({ name:{ type:String, unique:true } })...它允许你在相同的底层MongoDb collection上使用部分重叠的 schema 建立多个 model。
二、MongoDB增删改查操作 1、创建集合和文档 创建集合分为两步,一是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。..., author: 'wuyuxin', isPublished: true }); // 将文档插入到数据库中 course.save(); image.png 创建文档实际上就是向集合中插入数据...调用实例对象下的save方法将数据保存到数据库中。...({name: 'JavaScript基础', author: 'wuyuxin', isPublish: true}, (err, doc) => { // 错误对象 console.log...(err) // 当前插入的文档 console.log(doc) }); Course.create({name: 'JavaScript基础', author: 'wuyuxin
,Nest 官方为我们提供了一个 Mongoose 的封装,我们需要安装 mongoose 和 @nestjs/mongoose: npm install mongoose @nestjs/mongoose...} // 添加单个用户 async addOne(body: CreateUserDTO): Promise { await this.userModel.create.../user.service'; interface UserResponse {//这是一个 TypeScript 接口定义,用于描述用户响应的数据结构。...到这里我们的nest.js一个调用mongoose来操作mongoDB数据库的后端程序就已经写好了。...// 在界面上显示错误信息,告知用户请求失败 } }); } })
,比如 # 错误的 @udtaf(result_type=DataTypes.ROW([DataTypes.FIELD("word", DataTypes.STRING()) , DataTypes.FIELD...name: str = None, func_type: str = 'general') -> Union[UserDefinedAggregateFunctionWrapper, Callable...accumulator_type, func_type, deterministic, name) 如果func_type不是’general’,则会抛出错误...由于udtaf修饰的方法不是UserDefinedFunction对象,而是一个function,所以它会通过_create_delegate_function创建新的func 。..._create_delegate_function() …… 而_create_delegate_function则要求udtaf中的function的func_type必须是pandas
1.创建集合 创建集合分为两步,-是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合。...实际在数据库中产生的集合名为courses 1.创建文档 创建文档实际上就是向集合中插入数据。 方法1 分为两步: ①创建集合实例。 ②调用实例对象下的save方法将数据保存到数据库中。...course.save(); 方法2 和数据库相关的所有操作都是异步操作 创建文档 插入数据 Course.create({ name: 'JavaScript', author: '...create方法插入数据 Post.create({ title: 'aaa', age: 68, category: 'javascript', author: 'db...mongoose.model('Post', postSchema); // 插入文档数据 // User.create({ // name: 'xc' // }).then(result =
,我们可以启动项目看一下效果 cd backend npm i npm start 如果出现下面的结果说明我们的启动成功了 $ npm start > backend@0.0.0 start C:\...实际上在真正的开发环境中,如果我们这么设置允许所有的的源都可以访问会有很多问题,我们可以使用cors[4]来代替它 当然如果在生产中我们采用nginx部署之后,就不存在跨域了?...接下来就是我们平时常说的mvc模式下的m和c部分了,为了结构清晰,便于维护我们分成四部分scheme,model,controller,api scheme 在项目的根目录下创建scheme文件夹,因为这里项目简单我们就创建一个...,创建index.js文件: const mongoose = require("mongoose"); const model = mongoose.model.bind(mongoose); const...最后 本文结束,有什么问题和有错误的地方,欢迎大家的留言和评论,还有后续更新,下期更加精彩 ???
,虽然它提供的能力非常简单,但对于一些工具平台的开发完全可以胜任,并且可以写出各种千奇百怪的 MVC 模式(如果对服务端 MVC 不是很清晰可以阅读 服务端 MVC 之 Model2 的衍生)。...设计完成后将开发态页面使用 Webpack 打包构建,构建目录为服务端 Express 的静态资源目录。首屏渲染的工作交给 Ejs 模板引擎(事实上也可以直接使用 HTML 字符串渲染)进行处理。...由于当时还没出现成熟的服务端渲染应用框架,因此只能自己摸索构建 React 服务端渲染方案: 为了实现前后端代码同构,需要对服务端代码进行 Webpack 打包配置 使用 script 标签以及全局变量的形式实现前后端.../server" build:使用 Webpack 构建 Nuxt 资源包以及使用 Backpack 构建服务端入口文件(转义 TypeScript) pm2:以生产模式启动一个进程守护的 Web 服务器...需要注意客户端向服务端发送请求是跨域的,因此在服务端的开发态环境需要配置允许跨域。 **温馨提示:**一个服务端渲染框架楞是让我拆成了前后端开发分离的框架模式。
,从某种意义上几乎不会重复,生成过程比较复杂,有兴趣的朋友可以查看源码。...ThingModel(doc,true); //启用严格 var thing2 = new ThingModel(doc,false); //禁用严格 注意: strict也可以设置为throw,表示出现问题将会抛出错误...如果子文档在更新时出现错误,将直接报在父类文档中,可以这样处理: ChildrenSchema.pre('save',function(next){ if('x' === this.name...name:String } }); //其实就是匿名混合模式 5.Model 5.1 什么是Model Model模型,是经过Schema构造来的,除了Schema定义的数据库骨架以外...err.errors.color //错误属性(Schema的color属性) err.errors.color.message //错误属性信息 err.errors.path
领取专属 10元无门槛券
手把手带您无忧上云