使用nodejs操作mongodb,并使用express实现增删改查
1. 本地环境及项目结构展示
1.1 本地环境
- win10
- node v12.18.1
- 编辑器:VScode
- 语言:Node.js
- 框架:express
- 数据库:mongodb
1.2 项目结构图
1.3 案例介绍 - 学生档案管理
目标:模块引擎应用,强化node.js项目制作流程
知识点: http请求响应、数据库、模板引擎、静态资源访问
2. 制作流程
2.1 建立项目文件夹并生成项目描述文件
- 在命令行中输入
npm init -y
生成package.json文件
{
"name": "students",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"art-template": "^4.13.2",
"body-parser": "^1.19.0",
"dateformat": "^3.0.3",
"mongoose": "^5.9.20",
"router": "^1.3.5"
}
}
2.2 创建网站服务器实现客户端和服务器端通信
app.js代码如下:
//2.2.1 引入系统模块http
const http = require('http');
//2.2.2 创建网站服务器
const app = http.createServer();
//2.2.3 为网站服务器对象添加请求事件
app.on('request', (req, res) => {
router(req, res, () => {
})
});
//2.2.4 监听80端口
app.listen(80);
console.log('服务器已启动');
- 在命令行中输入
nodemon .\app.js
命令,在终端中可以看到“服务器已启动”。
2.3 连接数据库并根据需求设计学员信息表
第三方模块 mongoose
- 功能: 使用Node.js操作MongoDB数据库需要依赖Node.js第三方模块mongoose
- 在命令行中输入
npm install mongoose
命令,下载mongoose第三方模块
2.3.1 连接数据库
model/connect.js 代码如下:
//2.3.1 引入系统模块mongoose
const mongoose = require('mongoose');
//2.3.2 数据库连接 27017是mongodb数据库的默认端口
mongoose.connect('mongodb://localhost/playground', {
useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('数据库连接成功')) //连接成功
.catch((err) => console.log(err, '数据库连接失败')); //连接失败
2.3.2 根据需求设计学员信息表
model/user.js 代码如下:
//2.3.2 创建学生集合规则
const studentsSchema = new mongoose.Schema({
name: {
type: String,
//true表示title 属性必传;后面的是错误提示内容
required: [true, '请传入姓名'],
//最小长度是2,最大长度是10
minlength: [2, '姓名长度不能小于2'],
maxlength: [10, '姓名长度最大不能超过20']
},
age: {
type: Number,
//年龄最小10,最大25
min: 10,
max: 25
},
sex: String,
email: String,
hobbies: [String],
collage: String,
enterDate: {
type: Date,
default: Date.now
}
});
//2.3.3 使用规则studentsSchema,创建集合,返回集合构造函数(参数一:集合名称;参数二:集合规则)
const Student = mongoose.model('Student', studentsSchema);
//2.3.4 将学生信息集合进行导出
module.exports = Student;
2.4 创建路由并实现页面模板呈递
第三方模块 router
- 功能: 实现路由
- 使用步骤:
- 获取路由对象
- 调用路由对象提供的方法创建路由
- 启用路由,使路由生效
- 在命令行中输入
npm install router
命令,下载router第三方模块
第三方模块 art-template
- art-template 是一个简约、超快的模板引擎。
- 它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器。
- 在命令行中输入
npm install art-template --save
命令,下载art-templater第三方模块
route/index.js代码如下:
//2.4.1 引入router模块
const getRouter = require('router');
//2.4.2 获取路由对象
const router = getRouter();
//导入 创建学生信息集合 模块
const Student = require('../model/user');
//引入模板引擎
const template = require('art-template');
//引入系统模块querystring: 处理请求参数模块
const querystring = require('querystring');
//引入url模块
const url = require('url');
//2.4.3 呈递学生档案信息增加页面
router.get('/add', (req, res) => {
let html = template('add.art', {
});
res.end(html);
});
//2.4.4 呈递学生档案信息页表页面
router.get('/list', async(req, res) => {
//查询学生信息
let students = await Student.find();
let html = template('list.art', {
students: students
});
res.end(html);
});
module.exports = router;
2.5 实现 增删改查 功能
2.5.1 添加学生信息
views/add.art代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>添加学生档案信息</title>
<link rel="stylesheet" href=