三鑫西瓜霜

 

vue-cli(vue3) +node.js + express 跨域使用 后端session内容不保存

新人刚刚接触vue,想用js做个全栈,在登录状态保存时候遇到了SESSION,不被保存的问题。

开始以为是跨域问题,后来经过试验,发现并不是。

下图通过查看网络中的请求,发现每次请求的COOKIE是一样且存在的。

并且通过req.sessionid()函数的输出,发现每次session也是一样的,但是数据就是不存在。

 

 

所以归根结底是session没保存,尤其是使用post方法时,是不会自动保存的。需要我们手动设置。

 

router.post('/queryUser', (req, res) => {
    console.log('1:')
    console.log(req.sessionID);
    console.log(req.session)
    var sql = $sql.user.query;
    var params = req.body;
    conn.query(sql, [params.username], function(err, result) {
        if (err) {
            console.log(err);
        }
        if (result&&result[0]) {
            if (result[0].password === params.password) {
                jsonWrite(res, '登录成功');
                req.session.username = params.username;
                req.session.name = result[0].name;
                req.session.save();  //位置1
            }
            else{
                jsonWrite(res, '登录失败,请检查');
            }
            //jsonWrite(res, result);
        }
        else {
            jsonWrite(res, '用户不存在');
        }
    }) 
      req.session.save();  //位置2
});

同时还要注意的是要放在位置1才能正确保存SESSION。

 

 下面是一些用到的其他配置:

// node 后端服务器
const userApi = require('./api/userApi');
const fs = require('fs');
const path = require('path');
const express = require('express');
const session = require("express-session");
const cookieParser = require('cookie-parser');

const app = express();

app.use(cookieParser('alienergy'));
app.use(session({
  secret: 'alienergy',
  resave: true,
  saveUninitialized: true
}))

app.use(express.json())   //处理为json格式
app.use(express.urlencoded({ extended: false }))  //保证处理值得格式是想要的格式。

// 后端api路由
app.use('/api/user', userApi);

// 监听端口
app.listen(3000);
console.log('success listen at port:3000......');

 

posted on 2021-09-22 21:02  三鑫西瓜霜  阅读(508)  评论(0)    收藏  举报

导航