一.CURD
1.安装 mongoose: npm i mongoose --save( --save可以不写 新版npm会自动保存依赖 )
安装 express: npm i express@next ( @next是安装express的下一个版本 还未发布的版本 )
2.在主入口文件 app.js 里面
// 首先引入 express
const express = require("express");
// 得到一个express的实例
const app = express();
app.use(express.json())
/* 使用mongoose来连接数据库 */
const mongoose = require("mongoose")
/* 连接数据库 */
mongoose.connect("mongdb://localhost:27017/express-test",{
useNewUrlParser: true
})
/* 建立模型集合 就是表 */
const Product = mongoose.model("Product",new mongoose.Scheam({
title: { title: String } // 字段为 title 类型为 String
}))
// 根据发送的请求 进行相关的操作
app.get("/",async(req,res)=>{
//cosnt data = await Product.find().limit(2).skip(1) // 分页 1页2条数据
//const data = await Product.find().where({ title: "apple" }) // 查找title为apple的数据
//const data = await Product.find().sort({ "_id": 1 }) // 1表示正序 -1表示倒叙
const data = await Product.find() // 查找全部的数据
res.send(data) // 发送给前端
})
// 根据 id 来进行查询数据
app.get("/:id",async(req,res)=>{
const data = await Product.findById(res.params.id)
res.send(data)
})
// 新增数据post请求
app.post("/add",async(req,res)=>{
const data = req.body // 这边需要express开启才能得到在body里面 得到(就是中间件)
const adddata = await Product.create(data)
res.send(adddata)
})
// 根据 id 去修改数据展示
app.post("/update/:id",async(req,res)=>{
const pro= await Product.findById(req.params.id) // 先通过 id 找到相关的数据展示
pro.title = req.body.title // 直接将发送过来的数据 进行保存
await pro.save() // 一定要记得保存啊
res.send(pro)
})
// 根据id删除相关的数据
app.post("/delete/:id",async(req,res)=>{
const pro = await Product.findById(req.params.id)
await pro.remove()
res.send(pro)
})
/* 先往mongodb的数据库为 express-test 的表为 Product 插入一些数据(直接使用语句插入) */
Product.insertMany([{
title: "apple",
title: "banana"
]) // 这样 集合里面就有两条数据了
// 开启端口号
app.listen(4000,()=>{
console.log("http:localhost:4000")
})
3.这边要介绍一个类似于 postman 的工具,VSCode的一个插件 REST Client 就可以直接在VSCode里面发送请求了
1.建立一个 test.http 文件 必须是 .http结尾
@uri=http://localhost:4000/
###
GET {{uri}}
###
GET {{uri}}5d248c9ead7a151c708db9ad
###
POST {{uri}}post
Content-Type: application/json
{
"title": "产品"
}
###
POST {{uri}}update/5d2f227e62ab371e907b6ef7
Content-Type: application/json
{
"title": "66666"
}
###
POST {{uri}}delete/5d2727ac2d88e412c801c930
###
POST {{uri}}delete
// 注意的是:如果我们写了 发送的格式的话 就像 Content-Type: applictiaon/json 下面必须空一行
二.注册登录以及Token的验证
项目的目录结构如下
连接数据库的数据层
/* 首先要说明的是 我们的密码一般都是要进行加密的 这是比较道德的 */
1. 加密密码首先要一个插件 npm i bcrypt
2.require("bcrypt").hashSync(val,10) // 第一个参数是 要散列的值 第二个参数散列的强度
3.require("bcrypt").compareSync(原密码,数据库里面已经加密的) // 就是做散列的比较
// 连接 mongodb 数据库 就是模型层
const mongoose = require(""mongoose)
mongoose.connect("mongodb://localhost:27017/express-auth",{
useNewUrlParser: true,
useCreateIndex: true
})
const User = mongoose.media("User", new mongoose.Schema({
// 这个unique表示唯一的 表示往表里面插入数据的时不能重复
username: { type: String, unique: true },
password: {
type: String,
// 把前端传递过来的数据 进行设置
set(val){
require("bcrypt").hashSync(val,10) // 把前端传递过来的数据进行散列加密 强度为10
}
}
}))
module.exports = {
User
}
在入口文件 app.js主入口文件
/* token的生成说明: */
1.jsonwebtoken 同于生成token 安装 npm i jsonwebtoken
2. const jwt = require("jsonwebtoken")
3. 签名:jwt.sign(主键,明文)
4. 解开:jwt.verify(前端传递过来的token,明文)
// 引入连接数据库的模型层文件
const { User } = require("./models")
const express = require("express")
const app = express()
app.use(express.json()) // 让express能够解析前端传递来下的json
// 查询全部的数据
app.get("/api/users",async(req,res)=>{
const data = await User.find()
res.send(data)
})
// 注册
app.post("/api/register",async(req,res)=>{
const data = await User.create({
username: req.body.username,
password: req.body.password
})
res.send(data)
})
// 登录
app.post("/api/login",async(req,res)=>{
// 登录流程 1.先看 用户名是否存在 2.在进行密码与数据库的密码进行匹配
const isUser = User.findOne({ // 先在数据库里面找到对应的数据
username: req.body.username
})
if(isUser === null){
return res.status(422).send({ message: "您输入的用户名有误" })
}
// 接下来检验密码 compareSync( 前端传入的密码, 数据库散列好的密码 )
const isPass = require("bcrypt").compareSync( req.body.password, isuser.password )
if(!isPass){ // 如果匹配失败的话
return res.status(422).send({ message: "您输入的密码不正确" })
}
// 进行签名加密 jwt.sign( 要签名的字段(最好是唯一的主键什么的),第二个就是明文(可以随便写) )
const token = jwt.sign({
id: String(isUser._id)
},SECRET)
// 返回给前端
res.send(isUser,token)
})
/*接下来使用token*/
app.post("/api/profile".async(req,res)=>{
const raw = String(req.headers.authorization) // 前端把token放在了请求头里面
const { id }= jwt.verify(raw,SECRET) // 解密token ( 加密的参数,第二个参数是明文 )
const us = await User.findById(id) // 这样就实现了根据token 实现了请求
res.send(us)
})
app.listen(8000,()=>{
console.log("请访问:http://127.0.0.4:8000")
})