react + koa2实现的论坛
技术栈线上地址:点击查看 (访问会有点慢,至于原因,下面会说明) 页面预览页面主要分为话题列表页、消息页面、个人信息页面、创建话题页面、个人设置页面、注册页面、登陆页面、404页面。
文件目录前端使用create-react-app脚手架搭建,actions这些都是自己手动添加: 后端呃,说实话后端我不怎么熟悉,啊呸,是基本不会,自己写了简单的model+controller+middleware这种,也没看到什么好的脚手架,写了大量重复的代码... 前端的数据结构前端用了redux,整个state结构如下图: export default withRouter(connect(mapStateToProps,mapDispatchToProps)(NavBar));
const AppRouter = () => ( <Router> <div> <Switch> <Route path="/" exact component={Home}/> <Route path="/page/:pageNum?" exact component={Home}/> <Route path="/category/:categorySlug/:pageNum?" exact component={Home}/> <Route path="/topics/:id" component={TopicDetail}/> <Route path="/user-info/:loginname" component={UserInfo}/> <AuthRoute path='/message' component={Message}/> <PrivateRoute path="/login" component={Login}/> <PrivateRoute path="/register" component={Register}/> <AuthRoute path='/create-topic' component={CreateTopic}/> <AuthRoute path='/edit-topic/:topicId' component={CreateTopic}/> <AuthRoute path='/setting' component={Setting}></AuthRoute> <Route component={NoMatch}/> </Switch> </div> </Router> ); 值得一提的是 后端的设计hhh,请原谅我笑出身,对后端的理解基本上只是皮毛,看过一段时间 1.关于async和await,期间碰到一个问题,我需要根据评论还是啥数组id取出每个id对应的评论,我一开始是这样写的: const xxx = idList.map(id => { const result = await findReplyById(id); //xxx return result; }) 我勒个去,直接报错,然后我看了下,额,await只能在async下面使用,不能在function下,后面修改成Promise.all()的形式。 2.token的处理,用的是node-jsonwebtoken,看了狼叔的博客RESTFul,介绍的比较详细,将整个流程梳理了一遍。我再大概说一下整体流程吧,用户登陆,后端通过对账户和密码的验证后,返回给前端一个token,前端拿到这个token,保存到本地,后面发请求时,通过 //如果有token就在请求头里面带上 axios.interceptors.request.use(function (config) { const token = localStorage.getItem('login_token'); if (token) { config.headers['x-access-token'] = token; } return config; },function (error) { return Promise.reject(error); }); //对登陆过期做处理 axios.interceptors.response.use(function (response) { return response; },function (error) { const { errCode } = error.response.data; if (errCode && errCode === 100) { localStorage.removeItem('login_token'); history.push('/login'); } return Promise.reject(error); }); 3.lodash是个好东西。 4.呃,貌似也没其他什么要说明的,大部分都是数据库的增删查改...后面想到什么再补充吧。 总结与源码源码放在了github。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |