大家好,我是梅巴哥er
。本篇介绍的是FE-c项目的整个写就过程,这次发的是一个非redux版本。
- 项目代码开源地址:
https://github.com/guozi007a/FE-c
(FE-c就是font-end community 前端技术社区)。 - 首先介绍一个
为什么会做整个项目
。- 很多自学的人经常会遇到各种问题,查资料得不到想要的结果,或者对结果的理解不是很到位。所以做了一个问答区,更好的问出自己的疑惑。
- 面试方面的分享,能更好的帮到学弟学妹们。
- 对所任职的公司里发生的一些趣事,可以分享出来,让人更好的了解这个公司的氛围和文化,让后来者能喜欢这个公司或者避免踩雷。
- 自己写的一些有意思的代码,可以开源分享出来,成就自己,也帮助别人。
一,项目描述
- 项目是自己设计的,做了一个前后端分离的社区应用。
- 主要包括4个版块,
技术问答区
,面试分享区
,公司畅聊区
,代码开源区
。其中,主要做的是技术问答区,后面三个版块用到的知识,和第一个版块的技术重合度较高。 - 应用功能包括用户
注册
,登录
,设置个人资料
,发布问题
,问题列表
,回答问题
,点赞
(表示解决了问题)等。 - 前端用
react
搭建,还用了ES6
,antd
,webpack
,react-router-dom
等。 - 后端使用了
node+express+mongodb
等 - 采用模块化 / 组件化 / 工程化的模式开发。
二、技术选型
前端
:react, react-router-dom,antd4.x后端
: node, express, mongodb, mongoose,前后台交互
: ajax请求, axios, async/ await, 测试接口工具----postman模块化
: ES6, babel项目构建/工程化
: webpack, create-react-app其他相关
: blueimp-md5, multer, git, proxy
三、前端路由
注册
- path: /register
- component: Register
登录
- path: /login
- component: Login
主界面
- path: /main
- component: MainLogined
发布问题后跳转到的显示页面
- path: /main/articles
- component: Articles
个人资料页面
- path: /main/personal
- component: Personal
技术问答区问题列表
- path: /main/asks
- component: Asks
发布问题编辑页面
- path: /main/asks/md
- component: MdQues
单个问题页面
- path: /main/asks/questions/:id
- component: Questions
面试分享区
- path: /main/interview
- component: Interview
分享内容
- path: /main/interview/contents
- component: InterContents
- 公司畅聊区
path
: /main/componiescomponent
: Componies畅聊页面
- path: /main/componies/comchatting
- component: ComChatting
- 代码开源区
path
: /main/codescomponent
: Codes- 开源页面
- path: /main/codes
- component: /main/codes/codeshow
四、 API接口
- 接口的组成部分
- URL
- 参数
- 请求方式
- 响应数据格式
该项目用到了9个接口:
接口名称 | URL | 参数 | 请求方式 | 响应数据格式 |
---|---|---|---|---|
注册 | /register | user | POST | {code: 0, data} |
登录 | /login | {username, password} | POST | |
保存头像 | /saveAvatar | {avatar} | POST | |
获取用户个人信息 | /user | GET | ||
保存用户个人资料 | /savePersonalInfo | {nickname, intro, sex} | POST | |
保存问题 | /save/ques | {quesTittle, quesContent, publishDate, nickname} | POST | |
获取刚发布问题内容 | /get/ques | GET | ||
获取所有问题 | /get/allQues | GET | ||
根据_id获取对应问题 | /get/idQue | {idQues} | GET |
五、插件和第三方库
create-react-app
搭建脚手架react-router-dom
开发单页应用axios
前后端数据交互antd
组件库构建界面mongoose
操作mongodb
数据库express
搭建后台路由nodemon
后台程序自动重运行blueimp-md5
对密码进行MD5
加密处理js-cookies
操作浏览器端cookie
数据multer
表单数据提取和保存
六、遇到的问题和解决思路
代码中很多地方给了明确的注释,说明在敲的时候遇到了问题,在解决后进行了详细的注释。所以在代码中有注释的,在这里就不重复写了。
- ajax封装怎么统一处理错误提示
- 封装一个Promise对象来处理错误
export default function ajax(url, data={}, type='GET') {
// 用promise统一处理错误请求提示
return new Promise((resolve, reject) => {
let promise
if (type === 'GET') { // 发送GET请求
promise = axios.get(url, { // 配置对象
params: data
})
} else { // 发送POST请求
promise = axios.post(url, data)
}
promise.then(res => {
resolve(res)
})
.catch(err => {
// reject(err)
message.error('请求出错了:', err.msg)
})
})
}
- 登录页面的表单处理,antd组件的应用
- upload头像上传,要仔细研究
- 点击某个问题的标签,跳转到问题详情页面,如果显示出来该问题的内容。解决方法是通过路由携带_id,然后通过_id获取到该问题。
七、还需要改进的地方
- 修改个人资料时,如果不改昵称,也可以正常保存
- 头像容易获取不到,不稳定,应该是跨域问题还没解决好
- 编辑问题内容,应该用富文本编辑器最好。
八、顺便提一下自己写代码的方法
- 每天有一个目标,即今天要写哪个模块,做好记录
- 遇到的问题记下来,解决问题后,要做好注释或笔记
- 重视解决思路,有了思路,代码就是顺理成章的事情了。
-----------------暂时写到这里,以后有要补充的,就再继续写,下一步开始传该项目的redux版本-----end-----