node 使用session 获取数据undefined的问题

设置验证码和获取验证码
phoneCode.get('/code', (req, res) => {
  req.session.code = "1234"
  console.log(req.session);
  successSend(res, {}, "发送成功")
})
log.post('/register', (req, res) => {
  const body = req.body
  const account = body.account || ""
  const password = body.password || ""
  const mobile = body.mobile || ""
  const code = body.code || ""
  const set_Mobile = req.session.regMobile || ""
  if (set_Mobile) {
    if (m.checkEmpty(res, account, password)) return
    db.user.create({
      account: account,
      password: password,
      mobile: set_Mobile,
      nickname: m.getNickName()
    })
  } else {
    if (m.checkEmpty(res, account, password, mobile, code)) return
    console.log(req.session);
结果是输出:
Session {
  cookie: {
    path: '/',
    _expires: 2021-01-12T08:24:18.081Z,
    originalMaxAge: 660000,
    httpOnly: true
  },
  code: '1234'
}
Session {
  cookie: {
    path: '/',
    _expires: 2021-01-12T08:24:24.499Z,
    originalMaxAge: 660000,
    httpOnly: true
  }
}
可以看到第一个session有code,第二个就没有
然后去查了,说可能是跨域没有携带cookie的问题,于是前端又在请求时加上了 withCredentials,请求头也有withCredentials: true
request.headers['withCredentials'] = true
然后session还是没有code的值
node的请求头设置
  res.header('Access-Control-Allow-Origin', req.headers.origin)
  //res.header("Access-Control-Allow-Headers", "content-type");
  res.header("X-Powered-By", ' 3.2.1');
  res.header('Access-Control-Allow-Headers', '*');
  res.header('Access-Control-Allow-Methods', 'get,post')
  res.header('Access-Control-Allow-Credentials', true)
  res.setHeader('Content-Type', 'application/json');
前端跨域
module.exports = {
  devServer: {
    proxy: {
      '/api': { // 路径中有 /api 的请求都会走这个代理 , 可以自己定义一个,下面移除即可
        target: 'http://localhost:3000/', // 目标代理接口地址,实际跨域要访问的接口,这个地址会替换掉 axios.defaults.baseURL
        secure: false,
        changeOrigin: true, // 开启代理,在本地创建一个虚拟服务端
        ws: true, // 是否启用  websockets;
        pathRewrite: { // 去掉 路径中的  /api  的这一截
          '^/api': ''
        }
      },
    },
  }
}
最后解决了,就是跨域问题
vue.config.js:
module.exports = {
  devServer: {
    host: 'localhost',
    port: 8080, // 端口号
    https: false, // https:{type:Boolean}
    hotOnly: true, // 热更新
    proxy: {
      // 配置多个跨域
      '/api': {
        target: 'http://localhost:3000', //跨域接口的地址
        changeOrigin: false,
        pathRewrite: {
          '^/api': ''
        }
      }
    },
    headers: {
      'Access-Control-Allow-Origin': '*',
    }
  }
}
axios
  private client = axios.create({
    baseURL: '/api',
    timeout: 100000,
  });
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Node.js服务器中获取存在session中的数据,你需要使用一个session middleware(会话中间件)。最流行的是`express-session`中间件。 以下是一个简单的示例代码,演示了如何使用`express-session`中间件来设置和获取session数据: ```javascript const express = require('express'); const session = require('express-session'); const app = express(); // 设置session中间件 app.use(session({ secret: 'mysecretkey', // 用于加密session ID的秘密密钥 resave: false, // 强制每次请求都重新保存session数据 saveUninitialized: true // 在session中存储未初始化的数据 })); // 设置session数据 app.get('/setSessionData', (req, res) => { req.session.username = 'JohnDoe'; res.send('Session data saved successfully'); }); // 获取session数据 app.get('/getSessionData', (req, res) => { const username = req.session.username; res.send(`Session data: ${username}`); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在这个示例中,我们使用`express-session`中间件来设置和获取session数据。我们通过调用`req.session`属性来访问session对象并设置/获取数据。 当我们访问`/setSessionData`路由时,我们设置了一个名为`username`的session数据。然后,当我们访问`/getSessionData`路由时,我们从session获取数据并将其发送回客户端。 请注意,为了使用`express-session`中间件,我们需要先使用`npm install express-session`命令安装它。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值