# Ask-Answer **Repository Path**: projectsets/Ask-Answer ## Basic Information - **Project Name**: Ask-Answer - **Description**: 造轮子 之 问答社区(精简版知乎) . - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-11 - **Last Updated**: 2022-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 不知 - 与世界分享你刚编的故事 > 一个问答网站. > > `登录注册身份验证` `提问` `回答` `修改个人资料` `对回答点赞或反对` `问题添加标签` `关注其他用户` `......` #界面预览 `粒子化` ![image](/screenshots/11.png) `下雪` ![image](/screenshots/1.png) ![image](/screenshots/2.png) ![image](/screenshots/3.png) ![image](/screenshots/4.png) ![image](/screenshots/5.png) #技术栈 * Node.js * Expree.js * MongoDB * jQuery * Pug(Jade) #技术选型的理由 * 为什么Express.js(...Node.js) ? * 很火,社区庞大,体系成熟.而且作为前端er,这不是第一选择吗? * 为什么jQuery ? * 考虑直接上Vue.js 但是毕竟Express.js才开始学,Vue.js也刚过了一边文档,跟着敲了敲例子,没什么实战经验。不想两面受敌。等项目完工的差不多的时候,再考虑用Vue全家桶重构一遍前端部分。 * 为什么Pug(Jade) ? * 官方推荐的不说,之前为Hexo写主题的时候用的就是它:简洁,缩进党(Pythoner表示很亲切)。只是模板而已......不值得纠结太多。 * 为什么MongoDB ? * 已经了解了MySQL这种“关系型数据库管理系统”,还不会NoSQL,所以就趁这次机会学习一门NoSQL,感受一下两种不同的数据库系统的区别.而且前端er表示很亲切. #本地运行 **前提条件:** *安装好node.js(npm 会同时被安装好)、安装好mongoDB并运行服务)* `git clone https://github.com/shuirong/Ask-Answer.git` `cd Ask-Answer` `npm install` `node ./bin/www` `浏览器打开 127.0.0.1:3000` #项目日程(待完成) * 修改代码,防御`XSS` `CSRF`攻击(难点:4颗星) * 时间方面有些问题,时间本来好好的,存到数据库里就差了好几个小时,看样子是个坑.(**难点:1颗星**) * 关注其他用户(**难点:1颗星**) * 回答的其他排序方式(**难点:1颗星**) * 主页的回答按钮,跳到根据多个标签进行搜索的页面(**难点:1颗星**) * 导航栏的搜索功能,搜索问题(**难点:4颗星**) * 登出按钮,删除cookie信息(**难点:1颗星**) * 登录的帐户信息前端验证.邮箱注册/手机短信注册(**难点:5颗星**) * 登录页检测cookie信息,来决定是否需要输入帐号密码(**难点:2颗星**) * 添加特定标签页面,展示包含此标签的所有热门问题,和最新问题.(转换通过最新/最热按钮实现),相关样式(**难点:3颗星**) * ... #更新日志(已完成) * 2016-3-26: 把和头像相关的代码都用Async重写了一遍,可以更好地异步获取最新的头像信息. * 2016-3-25: 把用户会话放在服务端(生产环境是内存),把生成的sessionId放在cookie里.cookie里也有个user字段.此字段仅在页面header等展示用,并不被后端信任,也就是不会在进行用户数据交互时使用. * 2016-3-21: 登录注册页的背景特效(粒子化)(两套特效加载时随机一个) * 2016-3-20: 用户上传图片作为头像 * 2016-3-17: 问题主页里的所有回答的排序方式,默认为根据点赞数排序 * 2017-3-17: 回答/修改支持markdown语法 * 2017-3-7 : 回答点赞,一个回答,用户只能点赞/反对一次.而且刷新页面,点赞/反对标识仍然保留. * 2017-3-6 : 添加后端接口,接受编辑的个人信息,保存到数据库. * 2017-3-6 : 个人主页的个人信息的编辑功能,然后传给后端.(除了上传图片) * 2017-3-6 : 一个问题,一个用户只能回答一次 * 2017-3-5 : 继续完善用户主页的信息编辑样式及前后端代码.登录注册页面的样式,及一点特殊效果 * 2017-3-3 : 修改后端获取问题数据的接口,并根据请求参数的不同,在后台对数据进行处理.然后传给前端 * 2017-3-3 : 添加特定问题页面,对应样式. * 2017-3-2 : 添加后端接口,从数据库中获取标签信息,然后传给前端. * 2017-2-28: 主页加载时从后端获取标签信息,展示在页面右边,及其样式 * 2017-2-27: 完成主页添加两个按钮: 最新,最热.及对应的后端接口.及页面结构样式 * 2017-2-26: 最热:从数据库获取问题数据,并按提问时间倒序排列 * 2017-2-25: 关联提交的问题和某用户的提问.PS: mongoose的CRUD操作是异步的,它喵的坑死我了. * 2017-2-24: 完善问题提交的Ajax,后端写了个接口来处理提交的问题.并且定义了question和answer的Model * 2017-2-23: 加上登录注册模块.完成登录/注册页的结构(样式未完成).引入数据库MongoDB,定义了connect.js和user的Model. * 2017-2-13: 项目初始化.路由了几个页面,基本完成首页的结构和样式,更新README.md