echo "# kik" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/wp360/kik.git
git push -u origin master
npm init
npm i express ejs body-parser --save
npm i dependable lodash --save
npm i express-promise-router --save
npm i cookie-parser express-validator express-session connect-mongo connect-flash mongoose passport passport-local --save
// … 省略
// 首页 home.SetRouting(router);
2. controllers文件夹下新建对应逻辑代码(如:home.js)
3. 页面制作(home.ejs)
## 知识点:
* bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理.
* dependable [https://www.npmjs.com/package/dependable](https://www.npmjs.com/package/dependable)
* [lodash参考中文文档](http://www.css88.com/doc/lodash/)
* [利用cookie-parser读取cookie](https://segmentfault.com/a/1190000004139342?_ea=504710)
* express-validator是一个中间件,它验证请求的body、 params、 query、 headers 和 cookies,并且如果任何配置的验证规则失败,返回一个错误的响应;
```js
//引入flash(connect-flash)模块,flash是一个可以存储特定信息,显示完成后会被清除的模块
const flash = require('connect-flash')
//这两个模块可以将 cookie 信息保存到 mongodb 中。
const session = require('express-session')
const MongoStore = require('connect-mongo')(session)
WARNING: The
useMongoClient
option is no longer necessary in mongoose 5.x, please remove it.
app.use(session({
secret: 'thisisasecretkey', // 用来注册session id 到cookie中,相当与一个密钥。
resave: true, // 是否允许session重新设置,要保证session有操作的时候必须设置这个属性为true
saveUninitialized: true,// 强制保存未初始化的会话到存储器
store: new MongoStore({mongooseConnection:mongoose.connection})// session存储的实例子,一般可以用redis和mangodb来实现
}))
passport是一个功能单一,但非常强大的一个模块,支持本地账号验证和第三方账号登录验证。
passport是使用”策略“来验证请求,策略是passport中最重要的概念。passport模块本身不能做认证,所有的认证方法都以策略模式封装为插件,需要某种认证时将其添加到package.json即可。
策略模式是一种设计模式,它将算法和对象分离开来,通过加载不同的算法来实现不同的行为,适用于相关类的成员相同但行为不同的场景,比如在passport中,认证所需的字段都是用户名、邮箱、密码等,但认证方法是不同的。
参考文章:使用passport-local-mongoose、passport实现用户验证
关于网站使用QQ、weibo等第三方登录,功能未添加(后期有需要再补,可先参考下文)
参考文章:使用OAuth2.0协议的github、QQ、weibo第三方登录接入总结
npm i bcrypt-nodejs --save
参考文章:nodejs 搭建 RESTful API 服务器的常用包及其简介
app.locals._ = _;
参考文章:Express 模板传值对象app.locals、res.locals
npm i formidable --save
formidable:用于解析表单数据的Node.js模块,特别是文件上传。
***重点参考文章:通过Ajax方式上传文件,使用FormData进行Ajax请求
<form action="/dashboard" method="post" enctype="multipart/form-data">
enctype=”multipart/form-data” => 以二进制数据流的方式传输
参考文章:enctype=”multipart/form-data”设置与不设置的区别
关于图片等文件上传服务器,服务器未连接(本地上传功能已经实现,后期有需要再补服务器对接)
npm i async --save
async模块是为了解决嵌套金字塔,和异步流程控制而生 参考文章:nodejs中的async模块学习
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
npm i socket.io --save
Socket.io实际上是WebSocket的父集,Socket.io封装了WebSocket和轮询等方法,它会根据情况选择方法来进行通讯。