在Nodejs Express框架中,在post请求中设置的session值,为什么只能在post类型的请求中获取,而不能再get类型请求中获取?请大家帮帮我
这个session本来不是共用的吗,为什么在get类型请的求中获取不到?
中间件写错位置了吧?从 session 中间件这块调试一下吧
这就是使用session中间件的位置
var express = require(‘express’); var http=require(‘http’); var path=require(‘path’);
var cookieParser = require(‘cookie-parser’); var session = require(‘express-session’); var methodOverride =require(‘method-override’); var bodyParser = require(‘body-parser’);
var config = require(’./config/config.js’); var _ = require(‘underscore’);
var AV=require(‘leanengine’); var cloud=require(’./cloud’); var async=require(‘async’);
var app = express();
app.set(‘views’,path.join(__dirname,‘views’)); app.set(‘view engine’,‘html’);
app.use(cookieParser()); app.use(session({ secret:‘12345’, key:‘name’, cookie:{maxAge:1000602}, resave:false, saveUninitialized:true }));
app.use(cloud);
app.use(AV.Cloud.CookieSession({secret: ‘wDdejdbGekenvUsoNen’, maxAge: 3600000, fetchUser: true})); app.use(methodOverride(’_method’)) app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(express.static(path.join(__dirname, ‘public’)));
app.use(cookieParser()); app.use(session({ secret:‘12345’, key:‘name’, cookie:{maxAge:1000602}, resave:false, saveUninitialized:true })); 这就是配置session中间件的代码,这个代码有问题吗?
你的 session 和 AV.Cloud.CookieSession 冲突了吧,你上他们的论坛问问啊
saveUninitialized改为false试试呢?
@htoooth 恩,有可能,谢谢
@haoyong 也不行
这个问题还有其他的思路吗?
@lzboyue 你怎样调用的方法?在AVCloud中云函数等,都是post的形式调用的。get 获得不了session 你是调用自己的方法吧。
@htoooth 下面就是调用的代码.其中req.session.user在app.post请求中赋的值 app.get(’/ajax/validate’,function(req,res) { if(req.session.user) { var str={ “status”:“success”, “code”:40015, “user”:req.session.user } return res.json(str); } else { return res.json(statusInfoArray[15]); } });
@lzboyue post 使用和设置session 的方法呢?
@htoooth 下面就是post使用的代码: app.post(’/user/signin’,function(req,res) { var user1=req.session.user; var username=req.body.UserName; var password=req.body.Password; var findUser=new AV.Query(User); findUser.equalTo(“username”,username); findUser.select(“objectId”); findUser.find({ success:function(results) { if(results.length == 0) { //不存在该用户 return res.json(statusInfoArray[12]); } else if(results.length == 1){ AV.User.logIn(username,password,{ success:function(user) { var user={‘username’:username}; req.session.user=user; //登录成功 var str={ “user1”:user1, “user”:user } return res.json(str); }, error:function(user,error) { //登录失败 return res.json(statusInfoArray[15]); } }); } else { //出现异常 return res.json(statusInfoArray[7]); } }, error:function(error) { //查询数据出错 return res.json(statusInfoArray[4]); } }) });
你这是做接口的吧,客户端发送请求的时候,cookie有带吗?
@htoooth 前端使用的是Angularjs,是通过http获取后台数据的