项目地址:https://github.com/Nealyang/R...本来想等项目做完连载一系列的博客,随着开发的进行,确实遇到了很多坑,也请教了很多人。然后我想,为什么不在记录陷阱的同时分享收获。分享固然好,但如果能集思广益岂不更美。我们的口号是:坚决不做不完。本博客将为连载代码博客同步更新博客。以后随着项目的发展,可能会遇到之前写的不合适的地方,回去修改。如有不妥之处~欢迎兄弟们指教。谢谢!在上一篇session后端部分,我们已经实现了前后端的登录功能。您可能已经发现了问题。刷新页面时,如果之前登录过,则需要重新登录。显然,这不是我们想要的。所以这里我们使用session机制来解决这类问题。如果你没有session和coolie,可以参考我的博客。apiServer.jsapp.use(cookieParser('express_react_cookie'));app.use(session({secret:'express_react_cookie',resave:true,saveUninitialized:true,cookie:{maxAge:60*1000*30}//过期时间}));因为是登录信息,所以这里我们使用session。首先需要在apiServer.js中引入cookie-parser和express-session中间件。在cooolieParser中设置一个key,必须和session保持一致。然后设置苦力的过期时间。这里我们设置为30分钟。然后用户登录成功后,我们需要设置sessionrouter.post('/login',(req,res)=>{let{username,password}=req.body;if(!username){responseClient(res,400,2,'用户名不能为空');return;}if(!password){responseClient(res,400,2,'密码不能为空');return;}User.findOne({username,password:md5(password+MD5_SUFFIX)}).then(userInfo=>{if(userInfo){//登录成功letdata={};data.username=userInfo.username;data.userType=userInfo.type;data.userId=userInfo._id;//登录成功后设置sessionreq.session.userInfo=data;responseClient(res,200,0,'登录成功',data);return;}responseClient(res,400,1,'用户名密码错误');}).catch(err=>{responseClient(res);})});其中req.session.userInfo=data为设置session的userInfo。那么服务器端还需要再写一个接口。当用户打开网站时,会发起一个请求来验证用户是否登录。//用户认证router.get('/userInfo',function(req,res){if(req.session.userInfo){responseClient(res,200,0,'',req.session.userInfo)}else{responseClient(res,200,1,'请重新登录',req.session.userInfo)}});很简单,就是把请求中req.session.userInfo的信息返回过去。这样,当用户访问网站时,先发送这个请求,判断用户是否已经登录,如果已经登录,就拿到userInfo,直接往reducer里放一个action,修改statetree。前部前部比较传统。在最外层的容器中,直接发送请求即可classAppIndexextendsComponent{constructor(props){super(props);this.openNotification=this.openNotification.bind(this);this.shouldComponentUpdate=PureRenderMixiin.shouldComponentUpdate.bind(this);}openNotification(type,message){letthat=this;notification[type]({message:message,onClose:()=>{that.props.clear_msg();}});that.props.clear_msg();};render(){让{isFetching}=this.props;return(