技术栈简述 网上的node框架也挺多的,用的较多的有egg,express,koa等框架,框架间各有利弊,最后均衡下来,还是决定使用可拓展性比较强的koa2来搭建项目,加上最近在学习typescript...,最后决定使用的技术栈就是 koa+typescript+mysql+mongodb来搭建项目。...上面两张图很清晰的展示了洋葱模型的工作流程,当然,具体的原理实现的话与本篇无关,就不在深入描述了,有兴趣的同学可以自己到网上搜一下哈。...Typescript 网上特别多关于“为什么要用Typescript开发”,“Typescript开发的好处和坏处”,“为什么不用Typescript开发”等等的争论和文章,有兴趣的同学也可以去说道说道哈...不过这个项目除了使用mysql,也还有用到mongo,接下来看看mongodb怎么用 使用mongoose作为mongodb的中间件 // mongoose入口 import mongoose from
,就可以实现文档效果,除了可以应用到单体应用,在微服务架构中也是可以使用的,只需要整合zuul就可以实现各个服务的文档整合。...ApiBoot Swagger提供了一系列的默认配置,比如:文档标题、文档描述、文档版本号等,如果需要修改文档的默认配置,只需要在application.yml文件内对应配置参数即可实现自定义,告别了繁琐的代码配置...参数名 默认值 描述 api.boot.swagger.enable true 是否启用文档 api.boot.swagger.title ApiBoot快速集成Swagger文档 文档标题 api.boot.swagger.description...- 文档描述 api.boot.swagger.base-package SpringBoot默认package,详见AutoConfigurationPackages 生成文档的基础package...title: 接口文档 # 配置文档版本 version: v1.0 测试控制器 为了方便演示Swagger文档的强大之处,我们来创建一个测试的控制器,使用Swagger
实现项目中的模式验证:使用 Zod 在这篇文章中,我们将带您了解如何利用 Zod 在项目中实现模式验证。Zod 是一个功能强大的开源 TypeScript 库,旨在声明模式并执行验证。...使用 Zod 定义模式 Zod 中的一个核心概念是 z 对象,它可以让您轻松定义数据模式。...这导致您的模式与 TypeScript 类型之间紧密耦合,确保您的数据在整个应用程序中保持一致和验证。 类型安全和自动补全 使用 Zod 的一个奇妙之处在于它与 TypeScript 无缝集成。...这意味着您不仅获得运行时验证,还能在代码编辑器中获得增强的类型安全和自动补全。...validUser.id; // TypeScript 知道这是一个数字 validUser.username; // TypeScript 知道这是一个字符串 通过使用 parse,我们确保我们正在使用的对象不仅经过验证
SharePoint的文档库非常方便,可以管理日常的文档,更强大的是可以创建文件夹来分类,通常在UI界面上是非常简单了,点击文件夹,Create a Folder即可。...但是,怎样手动去创建文件夹呢,怎样在文件夹中创建子文件夹。...项目分析 举个栗子,我需要上传文档到文档库,希望把该文件上传到以年、月、日、上传人命名的子文件夹中,如:2013年-->5月-->11日-->陈小春,如下图所示这样 ?...点击当前月,进入以上传人命名的子文件夹 ? 点击上传人(陈小春),即可看到我们上传的文档 ?...之后创建Byte数组,将上传的文档附加到SubFolder中。
// 这会导致错误,因为 person 是只读的 console.log(person.name); // 输出 "Alice" 在这个例子中,我们使用 as const 创建了一个名为 person...const; deepReadonlyObject.a.b.c = 2; // 这会导致错误,因为所有属性都是只读的 在第一个例子中,deepObject 的属性仍然可以修改。...在第二个例子中,deepReadonlyObject 的所有属性,包括嵌套属性,都是只读的,无法修改。 实际应用场景 配置文件:使用 as const 定义配置文件,确保配置项不被意外修改。...例如,确保组件属性在使用过程中不会被修改。...如果你想了解更多关于 TypeScript 的高级特性和实战技巧,欢迎关注我的公众号「前端达人」。在这里,我们一起探索前端开发的无限可能,共同提升技术水平!
使用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 模型: import mongoose from 'mongoose'; const userSchema = new mongoose.Schema({ name:...使用内存数据库SQLite数据库 该方式无需安装数据库SQLite,使用的是内存数据库 以下步骤和之前的一样,不再做过多解释 mkdir backend cd backend pnpm init pnpm
使用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 模型:import mongoose from 'mongoose';const userSchema = new mongoose.Schema({ name: {...使用内存数据库SQLite数据库该方式无需安装数据库SQLite,使用的是内存数据库以下步骤和之前的一样,不再做过多解释mkdir backendcd backendpnpm initpnpm install
提示:需要对 Typescript 有一定了解,server 和 client 端均使用 Typescript 默认已经安装好 yarn或者npm 您可以按照顺序阅读 全栈 Todolist-server.../node @types/express @types/mongoose @types/cors 安装用来编译 Typescript 的concurrently 和 nodemon yarn add...3.3 API controllers 现在我们在 controller 中添加几个 todolist 相关的方法。...具体的解析如上,我们使用 json 来定义我们的数据。这个函数来初始化我们的 todolist 的数据,页面加载会调用。...技术栈参考 如果对上面技术栈不太熟悉的同学可以优先参考以下文档 react 官网 typescript 官网 node 官网 mongoDB 官网 翻译来自 freeCodeCamp
或许,利用主题感知的句子嵌入来识别文档中的主题变更,确保每个块封装一个主题会是一种不错的选择。 1.回顾RAG RAG系统是一个复杂的机器学习模型,它融合了基于检索的技术和生成式AI。...生成阶段: 一旦检索到相关文档,就会使用一个通常是基于transformer的大语言模型,如 GPT-4来创建一个连贯的、与上下文相适应的响应。...此模型使用检索到的信息来确保生成的内容是准确的,而且信息丰富。 RAG 系统的混合特性使它们对于知识密集型任务特别有效,在这些任务中,检索和生成的结合极大地提高了总体性能。...在处理具有token限制的大语言模型时,它确保了每个块都符合模型的约束。在自然语言处理任务中,通常使用基于token分块来保持文本的完整性,同时遵守模型的限制。...面向主题的分块技术旨在使用句子嵌入来识别文档中主题的变化。通过标识主题转移的位置,确保每个块封装一个单一的、连贯的主题,具体包括: 句子嵌入: 句子嵌入将句子转换成高维向量,从而捕捉句子的语义。
在本文中,我们通过基于结构外观(即距离传感器)识别位置来解决位置识别问题,扩展了之前在旋转不变空间描述子上的工作,该描述子完成了一个通用描述符,在俯仰运动不严重时,该描述子对旋转和平移都具有鲁棒性。...,其次,改进的算法改进了以前的暴力搜索,使用子描述符,并将搜索过程加快了一个数量级。...A 扫描上下文描述符 这里介绍一种新的空间描述符,名为扫描上下文描述符(SCD),该方法从分割原始测量数据开始,并使用鸟瞰图(BEV)将其投影到离散化的容器中,在划分BEV bin时,考虑了两种类型的垂直基座...比较三个样本CCs,内容保留在每个列中,而节点之间只移动列顺序,描述符中由运动引起的变化在描述符空间中显示为SCD列顺序偏移 B 三阶段位置识别 我们的位置识别算法由三部分组成:(i)使用检索键进行位置检索...与他们不同的是,我们在不事先知情的情况下追求全局定位精度,我们只依赖于描述符本身,同时通过引入子描述符来最小化全局搜索的计算成本。
如果不需要该版本号,在 schema 中添加{ versionKey: false}即可。 创建模型 使用我们的 schema 定义,我们需要将我们的userSchema转成我们可以用的模型。...字段不存在的文档Model.find( { age: { not: { lte: 24 }}})字段相关操作符符号描述exists匹配存在指定字段的文档type返回字段属于指定类型的文档数组字段的查找符号描述...没有符合查询条件的数据,result 返回 null。 更新 每个模型都有自己的更新方法,用于修改数据库中的文档,不将它们返回到您的应用程序。...ref 选项告诉 Mongoose 在填充的时候使用 User model。所有储存在 answerer 中的 _id 都必须是 User model 中 document 的 _id。...(https://github.com/Jack-cool/rest_node_api)中对于mongoose的使用做的简单的总结。
Schema——纯洁的数据库原型 1.1 什么是Schema 我理解Schema仅仅只是一断代码,他书写完成后程序依然无法使用,更无法通往数据库端 他仅仅只是数据库模型在程序片段中的一种表现,或者是数据属性模型...remove方法 4.Sub Docs 如同SQL数据库中2张表有主外关系,Mongoose将2个Document的嵌套叫做Sub-Docs(子文档) 简单的说就是一个Document嵌套另外一个... 如果children是parent的子文档,可以通过如下方法查询到children var child = parent.children.id(id); 4.2 新增、删除、更新 子文档是父文档的一个属性...,因此按照属性的操作即可,不同的是在新增父类的时候,子文档是会被先加入进去的。 ...done); }); 8.3 中间件特点 一旦定义了中间件,就会在全部中间件执行完后执行其他操作,使用中间件可以雾化模型,避免异步操作的层层迭代嵌套 8.4 使用范畴 复杂的验证 删除有主外关联的
WEB 应用的标准框架,大多数工程师都很熟悉他的设计思想(极简的内核,但能让你用各种中间件来扩展他的功能) Koa :设计思想非常类似 Express,区别在于它是使用 ES6 中的 generator...Mongoose Redis Sokect.io 这是一个简单的服务端多页应用示例,使用 Ejs 模板引擎进行页面渲染,渲染完成后交由 Anguar 进行页面的响应操作(发送请求使用 Angular...Vue 技术方案选型 2018年6月,使用 Vue 设计了服务端渲染的 Express 应用,大致技术选型如下: Mongoose Nuxt Vue lokka Muse-UI 客户端和服务端同构代码的...项目目录结构 在 Nuxt 的目录结构中,服务端引入的同构代码放在.nuxt 目录中,是 Webpack 打包后的代码文件,因此如果服务端不使用特殊的语法,完全不需要 Backpack 配置。...# 项目打Tag脚本 └── tsconfig_node.json # TypeScript配置文件 运行脚本设计 在package.json中的配置脚本如下: "build
mongoose.connect(uri,{keepAlive:120}) 五、models-模型 Models 是从 Schema 编译来的构造函数。...如果想更新单独一条文档并且返回给应用层,可以使用 findOneAndUpdate 方法。 六、文档-Documents Mongoose document代表着MongoDB文档的一对一映射。...-SubDocuments 子文档是指嵌套在另一个文档中的文档。...Mongoose子文档有两种不同的概念:子文档数组和单个嵌套子文档 const chidlSchema = new Schema({name:String}) const parentSchema...= new Schema({ children:[childSchema], child:childSchema }) 子文档与文档的区别是 子文档不能单独保存,他们会在他们的顶级文档保存时保存
之后,底层的实例字典会根据需要适当的进行调整。 要使用一个描述符,首先要创建一个描述符类,然后把描述符的实例放在类的定义中作为类变量来使用。...要执行所请求的操作,底层的实例字典(即dict属性)会根据需要进行适当的调整。描述符的self.name属性会保存字典的键值,通过这些键可以找到储存在实例字典中的实例数据。...描述符常常作为一个组件出现在大型的编程框架中,其中还会涉及装饰器或者元类。正因为如此,对于描述符的使用可能隐藏很深,几乎看不到痕迹。...:如果只想访问某个特定的类中的一种属性,并且做一些自定义处理,那么最好不要编写描述符来实现。...对于这样的任务,使用@property函数更加简单。针对于大量重用的代码的情况下,使用描述符更加有用(例如,我们需要在自己的代码中大量使用描述符提供的功能,或者将其作为库来使用)
留言功能在社交中占据很重要的作用。这里实现的留言功能,参考微信朋友圈的方式: 用户发送一个TOPIC话题,读者可以在该话题下面进行评论,也可以对该话题下的留言进行评论。...前端实现 使用技术 react ant design typescript 在上面的截图中,很明显,就是一个表单的设计,外加一个列表的展示。...Comment组件进行递归调用 列表是对用户发表的主题,留言以及子留言的展示。...后端 使用的技术: mongodb 数据库,这里我使用到了其ODM mongoose koa2 一个Node框架 pm2 进程守卫 apidoc 用来生成接口文档(如果你留意体验站点,右上角有一个..."文档"的链接,链接的内容就是生成的文档内容) 这里的搭建就不进行介绍了,可以参考koa2官网配合百度解决~ 其实,本质上还是增删改查的操作。
上文提到的几个框架对项目代码的架构要么是没约束,要么就是约束比较弱或者看起来很别扭。相比之下Nest的实现就很简洁,用起来很顺手。具体细节将在下文进行描述。...类型系统是后端开发很重要的一环,Nest是使用TypeScript实现的框架,因此原生就支持TypeScript,而且还大量使用了注解,熟悉 Spring 的朋友会感到十分亲切。...另外几种切面和请求处理的顺序见下图: 这里的Middleware就是Express原生的,其它几个切面的用法见官方文档,在此不多作介绍。...连接数据库 例子中使用mongoose连接和操作本地MongoDB数据库。为了更方便使用,Nest提供了@nestjs/mongoose包,对mongoose包装了一层,使其更符合Nest的使用风格。...文章的写作目的是为框架选型者提供一个快速的参考,也为对Nest感兴趣的人提供感性的认识。如果想更详细的了解Nest用法,请看官方文档。
Mongoose本质是一个对象文档模型(ODM)库, 他对Node原生的MongoDB模块进行了一部优化封装,并且提供了更多的功能。...#Mongoose的优势 可以像操作对象一样操作数据库 可以为文档创建一个模式结构(Schema) 可以对模型中的文档/文档进行验证 数据可以通过类型转换为对象模型 可以使用中间件来应用业务逻辑挂钩 比...}) #mongoose基本使用 #mongoose的几个新的对象 在MongoDB中,多个Document可以组成Collection(以下简称集合),多个集合又可以组成数据库。...集合 —— 由一组文档组成,如果将MongoDB中的一个文档比喻成关系型数据库中的一行,那么一个集合就相当于一张表。...mongoose中任何任何事物都是从Schema开始的。每一个Schema对应MongoDB中的一个集合(collection)。Schema中定义了集合中文档(document)的样式。
同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单。 2. Mongoose能做什么?...文档 —— 是MongoDB的核心概念,是键值对的一个有序集,在JavaScript里文档被表示成对象。同时它也是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行,但更具表现力。...集合 —— 由一组文档组成,如果将MongoDB中的一个文档比喻成关系型数据库中的一行,那么一个集合就相当于一张表。...Schema简述 Schema —— 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构...拥有了Model,我们也就拥有了操作数据库的金钥匙,在后面的内容中,我们就会学习使用Model来进行增删改查的具体操作,所以,一定要熟悉他的创建格式哟!
在基于大模型的知识库问答应用中,提升效果的点主要有: 1. 优化文档预处理; 2. 大模型的预训练及微调等; 3. 大模型的提示词优化; 4....使用专有数据训练embedding模型; 向量检索算法通常没什么可优化的,因为向量数据库里通常都已经实现了。 本文重点要讲的是怎么优化文档预处理。...表格数据的问题 普通段落通常还是比较好处理的,但是对于表格就非常复杂,而表格在文档中也可能有很多复杂的情况,例如合并单元格甚至嵌套表格、表格跨页等。...结构化就是变成有层级关系的json数据,文本化就是让大模型用文本来描述表格的内容,而这个文本化我觉得可能是更好的方式。不过我估计,这得几年后才比较可行。 2....图像问题 文档中除了有表格这种复杂的结构,还可能会有图像。