TypeError:req.session.destroy不是函数 - Express.js

时间:2018-02-12 17:23:00

标签: node.js reactjs express session

我使用React.js和Express.js作为网络服务器制作了我的webapp。 React在package.json中连接到Express(现在):

const cookieSession = require('cookie-session');

在我的Express服务器中,我用它来处理会话:

app.use(cookieSession({
 name: 'parse-session',
 secret: "SECRET_SIGNING_KEY",
 maxAge: 15724800000
}));

和此:

    return new Promise((resolve,reject)=>{

if(req.session.token){    

    console.log(req.session.token);
    request({

      uri:'http://myserver.herokuapp.com/parse/users/me',
      headers: {
        'X-Parse-Application-Id': 'my-app-id',
        'X-Parse-Session-Token': req.session.token
      },
      json:true    

    }).then((userData) => {

       if(userData){    

          resolve(userData);

       }

    }).catch((error) => {

        reject(error);
    });
  }

所以当我使用登录到我的API时,它运行正常,这是检查currentUser是否存在的代码:

   fetch('/user',{credentials:'include'})
    .then((response)=>{
        return response.json();
    })
    .then((body)=>{
        if(body.user){
            this.setState({logIn:true});
        }

    }).catch((error)=>{
           console.log('My error:',error);

    });

并且它可以正常工作,在React中调用:

 axios.post('/logout').then((res)=>{
        console.log(res);

 }).catch((err)=>{
        console.log(err);
 });

问题是当我尝试注销时:我在React上执行此操作:

app.post('/logout',(req,res)=>{


if(req.session){

   req.session.destroy((error)=>{
      if(error){
        console.log(error);
      }
   });
}
}); 

这是在Express上注销:

TypeError: req.session.destroy is not a function

给我这个错误信息:

req.session = null

为什么呢?我已经看到destroy()是一个函数。我也尝试过:{{1}}但是,当你在承诺之后打电话来检查会话是否存在时,它当前还活着。

为什么呢?我怎么用来解决它?

由于

1 个答案:

答案 0 :(得分:7)

req.session.destroy是您使用express-session npm模块时要使用的调用。但是,您使用的cookie-session在当前版本中未定义req.session.destroy,导致您收到错误。

要在使用cookie-session时销毁会话,只需将其设置为null:req.session = null。如果您决定使用express-session,那么req.session.destroy就可以了。

参考