安装什么的,我在这儿就不多讲了,相信能找到我博客的,说明你对express也有一定的了解了。不多说,我就直接主题吧。
1、中间件的使用
其实,跟多数的开发语言的中间件是一样的道理。在请求某个接口的时候先执行他,这就是中间件的原理。
(1)、路由中间件
//中间件的方法
var jwt = require('jsonwebtoken');
const checkAccessToken = (req, res, next) => {
//console.log(req.get('Connection'), '请求头')
debugger;
const loginToken = 'loginToken' //用于加密
let token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhIjoxLCJiIjoyLCJpYXQiOjE2OTQ2NzcyMDgsImV4cCI6MTY5NDY3NzIxOH0.8kyiWkPT8osZFTWmUbBTvFIVccyqCy26iY4rMqX6Pmk'
try {
jwt.verify(token, loginToken)
next();
} catch (error) {
res.status(500);
res.send({ code: 500, 'msg': 'token过期' })
next();
}
}
//在路由中使用中间件
router.get('/login/loginActive', checkAccessToken, LoginController.loginActive)
//当然,如果路由中需要执行多个中间件,我们可以像下面这样子写
router.get('/login/loginActive', [checkAccessToken , abc,def,ghi], LoginController.loginActive)//abc , def , ghi 为中间件的方法名字
(2)、全局中间件
全局中间件跟路由中间件没太大的区别,定义中间件是一样的,只是在配置生效的时候有些不一样
const testCheck = (req, res, next) => {
console.log('全局中间件')
next();
}
router.use(testCheck) //全局中间件
router.get('/login', LoginController.login) //路由
router.get('/user/getList', UserController.getUserList) //路由
router.get('/login/loginActive', LoginController.loginActive) //路由
//这样,在进料入每一个路由的时候都会先走 testCheck 这个中间件的方法
//需要注意的时,全局中间件的配置的时候,一定要在路由前面。不然,不会生效
2、获取请求头
在node中,获取请求头,我们只需要像下面的代码
router.get('/login/loginActive', checkAccessToken, (req,res)=>{
let Cookie = req.get('Cookie') //获取请求头Cookie的值
//也就是说,获取请求头,我们只需要req.get('请求头的key')
})
3、session的使用
(1)、默认情况下,node是没有session的。所以,我们需先安装它的扩展
npm install express-session --save
npm i cookie-parser --save #顺便也把cookie的扩展也一并安装上去,说不定之后有用得上的时候
(2)、在入口文件app,js中
var session = require('express-session')
app.use(session({
secret: 'mykey', //可以随意写
resave: false,
saveUninitialized: true
}))
(3)、在控制器中,我们要设置session的地方
req.session.loginSession = { name: 'xiaobing', id: 5 }; //loginSession 可随意,相当于其他语言中session的名字一样
(4)、在需要获取session的地方
req.session.loginSession //loginSession 需要跟之前设置session的名字需要对应
console.log(req.session.loginSession, '获取session')
deleteSession: (req, res) => {
console.log(req.session, 'session')
req.session.destroy() //删除所有session的方法
//或者直接把某个session的值设置为 undefined
req.session.loginSession = undefined;
res.send('删除session')
res.end()
}
4、redis的连接和基础使用
(1)、安装
npm install --save [email protected] #不能安装最新的,不然node会报错
#当然,如果不报错的情况下,也可以直接如下
npm install --save redis
(2)、在根目录下新建一个db文件夹,在该文件夹中新建一个redis.js的文件
var redis = require('redis')
const client = redis.createClient({
host: 'localhost', //本地 注意此处不要加http或https
port: 6379 //端口号默认6379
});
module.exports = client;
(3)、在需要使用redis的控制器中引入
var client = require('../../db/redis') //注意引入的路径
//对应的方法中使用
client.set('myName' , 'xiaobing') //设置 (注意前面的 client 需要和刚在上面定义的变量相同)
5、文件上传
(1)、上传到服务器
A、安装扩展
npm install multer --save #安装扩展
B、在路由中进行配置
const multer = require('multer')
const upload = multer({ dest: 'public/images/' }) //dest此处是文件保存的路径。其实,upload是一个中间件。
router.post('/login/upload', upload.single("file"), (req, res) => { //按网上所说,upload.single("file") 中的 file 是前端name的值,这个我还不是很懂
if ('POST' != req.method) {
return false;
}
var fs = require("fs"); //这儿需要引入fs扩展
var oldFile = req.file.destination + req.file.filename;
var newFile = req.file.destination + req.file.originalname;
fs.rename(oldFile, newFile, function(err) {
if (err) {
res.send('上传失败!');
} else {
res.send('上传成功!');
}
});
})
C、前端的处理逻辑
//前端的处理逻辑
var formdata=new FormData();
formdata.append('file',$('.file')[0].files[0]); //插入上传文件的内容
$.ajax({
url:'/login/upload',
type:'post',
contentType:false, //这一句和下一句是必须加上的
processData:false,
data:formdata,
success:function (data) {
console.log(data)
}
})