前言
用到的开发软件:
node软件:node官网
mongodb数据库:选择commuityServer下载,安装时,选自定义
compass数据库可视化工具:可单独下载,也可安装mongodb时下载
第一次接触Node,也就会一点点基础操作。
一、nodejs是什么?
nodejs是运行在服务端的js。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
它的核心知识是ESMSCript(js里面有的),和node环境提供操作系统模块、文件模块等API(别人写好的,尽情调用)
二、mongodb是什么?
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,跟MySQL,Oracle等数据一样,都是用来存储数据的。只不过两者的术语有点区别:
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
2.1 新增数据
创建集合分两步,第一是对集合设定规则【类似表结构,有哪些字段,字段的类型等等】,第二是用规则创建集合,创建mongoose.Schema构造函数的实例即可创建集合。
第一种方法:创建集合的形式
//创建集合规则
const courseSchema=new mongoose.Schema({
name:String,
author:String,
isPub:Boolean
});
//引用规则创建集合 返回构造函数
const Course=mongoose.model('Course',courseSchema)
//new
const course=new Course({
name:"急救小知识",
author:"佚名",
isPub:true
})
//保存到数据库里
course.save();
第二种:创建文档的形式
//创建集合规则
const courseSchema=new mongoose.Schema({
name:String,
author:String,
isPub:Boolean
});
//引用规则创建集合 返回构造函数
const Course=mongoose.model('Course',courseSchema)
Course.create({
name:"php开发",
author:"佚名",
isPub:false}
,(err,doc)=>{
console.log(err);
console.log(doc)
})
2.2 修改数据:updateOne()、updateMany()
/创建集合规则
const courseSchema=new mongoose.Schema({
name:String,
author:String,
isPub:Boolean
});
//引用规则创建集合 返回构造函数
const Course=mongoose.model('Course',courseSchema)
//_id是条件
Course.updateOne({_id:'5ff2c2f8e435bb1c58490b6f'},{name:'女生化妆宝典'}).then(result=>console.log(result))
2.3 查询数据:find()和findOne()
/创建集合规则
const courseSchema=new mongoose.Schema({
name:String,
author:String,
isPub:Boolean
});
//引用规则创建集合 返回构造函数
const Course=mongoose.model('Course',courseSchema)
//无条件查询
Course.find().then(result=>console.log(result))
//带条件查询全部
Course.find({_id:'5ff2c2f8e435bb1c58490b6f'}).then(result=>console.log(result))
//只查询一条
Course.findOne({_id:'5ff2c2f8e435bb1c58490b6f'}).then(result=>console.log(result))
2.4 删除数据:findOneAndDelete()、deleteMany()
//创建集合规则
const courseSchema=new mongoose.Schema({
name:String,
author:String,
isPub:Boolean
});
//引用规则创建集合 返回构造函数
const Course=mongoose.model('Course',courseSchema)
//按条件删除一个
Course.findOneAndDelete({_id:'5ff2c2f8e435bb1c58490b6f'}).then(result=>console.log(result))
三、第三方模块 mongoose操作mongodb
mongoose是nodeJS提供连接 mongodb的一个库. 基本可以实现对mongodb数据库的操作需求。
使用:只需要在当前项目,打开cmd,输入命令:
npm install mongoose
启动数据库服务:
Net stop mongodb 关闭服务
Net start mongodb 启动服务
如果服务拒绝访问,则
打开C:\Windows\System32找到cmd.exe然后以管理员的身份运行。
数据库连接:数据库在有数据插入时,会自动生成。
const mongoose=require('mongoose') //先引入
mongoose.connect('mongodb://localhost/Stu',{ useNewUrlParser: true,useUnifiedTopology: true})
.then(()=>console.log('数据库连接成功'))
.catch(err=>console.log(err,'数据库连接失败'))
四、基本流程
-
构造web服务器
-
app.js页面 const http=require('http') const app=http.createServer();//服务器 //当客户端请求服务器时, app.on('request',(req,res)=>{ //使用路由,判断好后去调用路由 router(req,res,()=>{ console.log('1') //必填的回调函数 }); serve(req,res,()=>{ //启用静态资源功能 }) }); //必须监听端口 app.listen('80') //运行node app.js console.log('服务器启动成功')
- 创建user集合:需要exports,给外部引用
-
const mongoose=require('mongoose'); //创建集合规则 const Student=new mongoose.Schema({ name:{ type:String, required:true, minlength:2 }, age:{ type:Number, required:true, minlength:1 }, sex:{ type:String, required:true }, email:String, hobby:[ String ], college:String, enterDate:{ type:Date, default:Date.now } }) //使用规则创建集合 const Stu= mongoose.model('Student',Student); //导出模块 module.exports=Stu
- 拟定路由协议:在当前项目,npm install router
-
const Student=require('../model/user.js')//希望接收到构造函数,用变量接收 const getRouter=require('router')//先install 引入路由模块 const router=getRouter();//获取路由对象 const template=require('art-template')//引入模板引擎 const queryString=require('querystring') //响应路由 index.art静态模板 router.get('/add',(req,res)=>{ //添加学生 let html=template('index.art',{}) res.end(html);//响应给客户端 }) //list.art静态模板 router.get('/list',async (req,res)=>{ //展示学生 let Stus= await Student.find();//查找所有学生 console.log(Stus) let html=template('list.art',{ Stus:Stus }) res.end(html) }) //实现学生信息添加 router.post('/add',(req,res)=>{ //接收post数据 let formDate='' req.on('data',param=>{ formDate+=param }) //请求参数 req.on('end',async ()=>{ //async变成异步函数 Student.create(queryString.parse(formDate))//使用Student创建数据 res.writeHead(301,{ Location:'/list' //重定向 }) res.end()//结束请求 }) }) module.exports=router
- 静态页面渲染:安装第三方模块art-template,相关语法搜搜art-template语法学习
1、准备一个静态页面,改为art后缀。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h3>{{name}}</h3>
<h3>{{age}}</h3>
</body>
</html>
2、在js里引用模板
//导入模板引擎
const template=require('art-template');
const path=require('path')//系统模块
//模板路径是绝对路径
const view=path.join(__dirname,'views','index.art')
const html=template(view,{
name:"家家",
age:24
})
console.log(html)
其他
原文demo地址:简单demo