JavaScript基础课程二十六、MongoDB 数据库实战 本课是全栈开发的收尾核心课聚焦MongoDB数据库实战彻底打通数据持久化环节。MongoDB作为文档型数据库语法贴合JavaScript搭配Node.js极易上手完美适配前端全栈学习路径。课程从环境搭建、连接数据库到Schema定义、CRUD操作再到Node.js接口整合层层递进用单词存储案例贯穿全程通俗易懂。学习本课不仅能掌握数据库基础操作更能建立完整的全栈开发思维实现数据从前端到后端再到数据库的闭环流转。MongoDB持久化存储解决了本地文件数据丢失的问题是企业级项目的基础技能掌握本课内容标志着完成从纯前端到全栈开发者的进阶。一、课程学习目的理解MongoDB数据库的核心特性、适用场景掌握文档型数据库的基础概念。学会MongoDB的安装、启动、连接熟练使用 Compass 可视化工具管理数据。掌握Node.js连接MongoDB的方法实现数据的增删改查CRUD基础操作。能够结合Node.js后端搭建完整的“后端数据库”接口服务实现数据持久化存储。理解数据库、集合、文档的层级关系学会规范设计数据结构。打通全栈开发最后一环实现前端—后端—数据库的数据互通完成完整全栈小项目。二、核心知识点讲解1. MongoDB 基础认知MongoDB是一款开源的文档型NoSQL数据库数据以BSON格式类似JSON存储结构灵活无需固定表字段适合前端全栈项目、快速开发、数据结构多变的场景。核心概念对应数据库database对应库、集合collection对应表、文档document对应行数据学习门槛低和JavaScript语法契合度高。相比传统关系型数据库MongoDB无需编写复杂SQL语句API简洁易懂配合Node.js开发效率极高是前端全栈入门首选数据库。2. MongoDB 核心工具与环境MongoDB Server数据库核心服务负责数据存储与读取。MongoDB Compass官方可视化工具直观查看、新增、修改、删除数据无需命令行操作。MongooseNode.js环境下的MongoDB对象模型库封装了连接、操作数据库的API简化代码支持数据验证是开发必备依赖。3. Mongoose 核心流程安装Mongoose依赖引入库并连接MongoDB服务。定义Schema数据模式规定字段类型、必填项等规则。根据Schema创建Model模型Model是操作集合的核心入口。调用Model方法实现数据的增删改查CRUD。4. MongoDB 基础操作CRUD新增数据Model.create()、new Model().save()查询数据Model.find()、Model.findOne()、findById()修改数据Model.updateOne()、findByIdAndUpdate()删除数据Model.deleteOne()、findByIdAndDelete()5. 全栈数据流转流程前端发送请求 → Node.js后端接收请求 → 调用Mongoose操作MongoDB → 数据库返回结果 → 后端将结果返回给前端完成完整数据交互。三、示例程序带详细注释示例1Node.js连接MongoDBMongoose// 引入mongooseconstmongooserequire(mongoose);// 数据库连接地址本地默认地址consturlmongodb://localhost:27017/wordDB;// 连接数据库mongoose.connect(url).then(()console.log(MongoDB连接成功)).catch(errconsole.log(连接失败,err));示例2定义Schema与Model// 定义单词数据模式规定字段规则constwordSchemanewmongoose.Schema({// 英文单词字符串必填en:{type:String,required:true},// 中文释义字符串必填cn:{type:String,required:true},// 创建时间默认当前时间createTime:{type:Date,default:Date.now}});// 创建模型集合名称words对应数据库中的集合constWordmongoose.model(Word,wordSchema);// 导出模型供接口使用module.exportsWord;示例3数据增删改查操作constWordrequire(./model/wordModel);// 1. 新增单词asyncfunctionaddWord(en,cn){constresawaitWord.create({en,cn});console.log(新增成功,res);}// 2. 查询所有单词asyncfunctionfindAllWord(){constlistawaitWord.find();console.log(单词列表,list);}// 3. 根据id修改单词asyncfunctionupdateWord(id,en,cn){constresawaitWord.findByIdAndUpdate(id,{en,cn});console.log(修改成功);}// 4. 根据id删除单词asyncfunctiondeleteWord(id){constresawaitWord.findByIdAndDelete(id);console.log(删除成功);}示例4结合Node.js接口consthttprequire(http);constWordrequire(./model/wordModel);constserverhttp.createServer(async(req,res){// 设置响应头res.setHeader(Access-Control-Allow-Origin,*);res.setHeader(Content-Type,application/json;charsetutf-8);// 获取单词列表接口if(req.url/api/word/listreq.methodGET){constlistawaitWord.find();res.end(JSON.stringify(list));}});// 启动服务server.listen(3000,(){console.log(服务启动http://localhost:3000);});四、掌握技巧与方法操作MongoDB数据库前必须先启动MongoDB服务否则连接失败。使用Mongoose时先定义Schema约束数据格式避免脏数据存入数据库。所有数据库操作都是异步任务必须使用async/await接收结果防止数据获取不全。数据库名称、集合名称语义化便于后期维护和扩展。调试数据时配合MongoDB Compass可视化工具直观查看数据变化。接口路径统一加前缀如/api/区分普通地址和接口地址。处理异步操作时添加try/catch捕获错误提升服务稳定性。数据id采用MongoDB自动生成的_id唯一且稳定适合作为操作依据。五、课后作业基础作业安装MongoDB服务和Compass工具启动服务并连接成功。初始化项目安装Mongoose依赖编写代码连接本地数据库。定义单词数据Schema创建对应的Model模型。进阶作业实现单词数据的新增、查询、修改、删除四项基础操作。使用Compass查看数据库数据核对操作结果。封装数据库操作函数便于复用和维护。实战作业结合Node.js搭建完整全栈服务实现获取单词列表、新增单词、删除单词接口数据存入MongoDB实现持久化接入前端页面完成前后端数据交互代码规范、注释完整纳入Git版本管理。上一课Node.js 后端基础 实战作业代码代码功能说明本实战作业基于Node.js原生模块搭建完整的后端接口服务实现单词数据管理功能。项目使用http模块搭建服务器监听指定端口处理前端跨域请求通过fs模块读取本地json文件存储单词数据实现获取单词列表、查询单个单词两大接口配置完整响应头返回标准JSON格式数据支持前端页面直接调用。代码结构清晰注释详尽区分路由地址处理异常情况完整覆盖Node.js后端基础知识点演示原生后端服务搭建、文件读写、前后端交互的全流程适合巩固后端入门知识。注意事项运行代码前必须安装Node.js环境验证node -v命令可用。启动服务命令node 文件名.js修改代码后需关闭服务重新启动。确保word.json文件和主代码文件路径一致防止文件读取失败。必须配置跨域响应头否则前端页面无法正常请求接口。端口号避免占用若提示端口占用可修改为8080、9000等其他端口。返回数据必须用JSON.stringify转为字符串前端才能正常解析。关闭服务使用CtrlC不要直接关闭终端防止端口残留占用。不要手动修改word.json格式避免语法错误导致读取失败。完整实战代码项目结构node-server-demo/ ├── server.js # 后端服务主文件 └── word.json # 数据存储文件word.json数据文件[{en:apple,cn:苹果,id:1},{en:banana,cn:香蕉,id:2},{en:orange,cn:橙子,id:3},{en:book,cn:书本,id:4}]server.js服务主文件// 导入核心模块consthttprequire(http);constfsrequire(fs);constpathrequire(path);// 拼接数据文件路径constfilePathpath.join(__dirname,word.json);// 创建服务器constserverhttp.createServer((req,res){// 配置响应头解决跨域、设置编码格式res.setHeader(Access-Control-Allow-Origin,*);res.setHeader(Content-Type,application/json;charsetutf-8);res.setHeader(Access-Control-Allow-Methods,GET,POST);// 读取单词数据constreadWordData(){try{constdatafs.readFileSync(filePath,utf8);returnJSON.parse(data);}catch(err){return[];}};// 1. 获取所有单词列表接口if(req.url/api/word/listreq.methodGET){constlistreadWordData();res.end(JSON.stringify({code:200,msg:获取成功,data:list}));return;}// 2. 404 接口不存在res.writeHead(404);res.end(JSON.stringify({code:404,msg:接口地址不存在}));});// 监听端口constPORT3000;server.listen(PORT,(){console.log(Node.js服务启动成功);console.log(接口地址http://localhost:${PORT}/api/word/list);});运行与测试在项目文件夹打开终端执行 node server.js 启动服务浏览器访问 http://localhost:3000/api/word/list 查看返回数据前端可通过fetch/axios直接调用该接口作业验收标准服务启动成功终端无报错能正常访问接口地址。接口返回标准JSON格式数据包含单词列表。跨域配置生效前端可正常请求并接收数据。代码规范注释清晰模块引入和路径书写正确。数据存储在本地json文件读取正常无格式报错。