node框架之express

安装什么的,我在这儿就不多讲了,相信能找到我博客的,说明你对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')

node框架之express_第1张图片
(4)、删除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)
    }
})

你可能感兴趣的:(express)