-
安装express
npm i express -g
npm i express-generator -g
-
创建express
创建项目: express 项目名
如果出现express无法运行代码报错,请查看
-
app.js配置
-
安装中间件:
npm i cors 跨域中间件
npm i multiparty 静态文件中间件
npm i mongoose@6 数据库选择mongoose(@+版本号)
-
中间件引入
在App.js中
建议在其下面引入,
跨域// 跨域:安装第三方模块npm i cors
let cors =require("cors")
app.use(cors())中间件
-
图片配置中间件
// 配置图片:先安装第三方模块npm i multiparty
app.use("/upload",express.static("upload"))
-
token中间件配置(安装 npm i jsonwebtoken)
//token验证
let expressJwt =require("express-jwt")//token中间件
app.use(expressJwt({
secret:"ma",
algorithms:["HS256"]
}).unless({
path:['/log']//不需要的token验证路由!基本所有接口都要写入
}))
app.js 的token
let jwt = require("jsonwebtoken")
let token ="Bearer "+jwt.sign({"name":pwd.uname,"password":pwd.pwd},"ma",{expiresIn:60})// 60存在时间 "Bearer "必须加括号!
-
mongoose数据配置
在app.js同级建立model文件夹,里面建立文件db.js和model.js如图:npm i mongoose@版本号
const mongoose = require("mongoose")
mongoose.set("strictQuery",true)
mongoose.connect("mongodb://127.0.0.1:27017/houtai",(err)=>{//houtai是建立的数据库名
if(!err){
return console.log('数据库访问成功')
}
console.log("失败访问数据库")
})
module.exports=mongoose
const { Schema } =require("mongoose")//引入mobgoose
let mongoose =require("./db")//导入暴露的db.js
let user =new Schema({//配置表子段
uname:String,
level:Number
})
let header =new Schema({
head:String,
zhid:{
type:mongoose.Types.ObjectId,//关联表
ref:'zhid'
}
})
let userModel =mongoose.model("user",user,"user")//创建user表
let headerModel = mongoose.model("header",header,"header")//创建header表
//create添加数据
// userModel.create({//userModel是user表添加的也是user的字段名的数据
// uname:"user",
// pwd:'123456',
// level:2
// })
// headerModel.create({//userModel是header表添加的也是header的字段名的数据
// head:"广告位",
// zhid:"640e98a9dd3d307aa325d9b9"
// })
module.exports={//暴露
userModel,headerModel
}
//运行时要调用我在index.js调用的(以下代码是router文件夹的index.js)
//model导入数据
const {userModel,headerModel} = require("../model/model")
router.post('/log', async function(req, res) {//(!!!注意async异步!!!)
let user=await userModel.find({uname:body.user})//简单查询下(调用成功会出现‘数据库访问成功’)
res.send({
code:200
})
})
-
Router文件夹的index/user配置
index属于一级路由,user属于二级路由的
话不多说上代码,我写的是简单登录带token
var express = require('express');
var router = express.Router();
let app=express()
//token
let jwt = require("jsonwebtoken")
// body中间件
app.use(express.json())
app.use(express.urlencoded({extended:false}))
//model导入数据
const {userModel,headerModel} = require("../model/model")
/* GET home page. */
router.post('/log', async function(req, res) {
let body= req.body//body接收数据
let user=await userModel.find({uname:body.user})//简单查询下
// console.log(user,"user")
console.log(body)
if(user[0]){
let pwd=await userModel.findOne({uname:body.user,pwd:body.pass})//也是查询
console.log(pwd,"pwd")
if(pwd){
let token ="Bearer "+jwt.sign({"name":pwd.uname,"password":pwd.pwd},"ma",{expiresIn:60})//生成token,(!切记"Bearer "要加空格)
console.log(pwd,token,"token")
return res.send({//返回值
code:200,
message:"登录",
token
}) }else{
return res.send({
code:250,
message:"密码错误"
})
}
}else{
return res.send({
code:404,
message:"账号不存在"
})
}
});
module.exports = router;
配置基本就这些,前端就先不说了
-
Router下的inde.js配置
-
body中间键
配置中间件post传值的话要用body接收值
复制下app.js的
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
-
core跨域需要连接前端时
app.express()
var core =require("cors")
app.use(cors())
-
fs文件操作模块
var fs =require("fs")
let data =JSON.parse(fs.readfileasync("读取文件路径"))//可用path模块使用
-
path路径查找和拼接
var path =require("path")
let ip = path.join(__dirname+"/")//join是路径拼接,__dirname当前文件地址
-
multiparty静态文件上传
在app.js同级创建upload
//app.js配置
app.use("/upload",express.static("upload"))//存储图片'/uplaad'路径 后者名称
routes文件下的index.js
const multiparty =require("multiparty")//存储图片用
// 保存图片
router.post('/save',(req,res)=>{
let from =new multiparty.Form()//调用multiparty 下的Form
from.uploadDir='upload'//咱们创建的upload
from.parse(req,(err,Datas,Imgdata)=>{
console.log("http://localhost:3000/"+Imgdata.file[0].path);//http://localhost:3000/后端端口号,Imgdata是前端传递过来的,可以打印Imgdata查看
res.send("http://localhost:3000/"+Imgdata.file[0].path)
})