kik

项目说明:

  1. 项目启动 node(nodemon) server.js
  2. 项目相关页面
    • 登录页 http://localhost:3000/
    • 注册页 http://localhost:3000/signup
    • 首页 http://localhost:3000/home
    • 群聊 http://localhost:3000/group/:name (http://localhost:3000/group/Vue.js)
    • 管理页 http://localhost:3000/dashboard (上传群组信息)

git 操作

https://github.com 新建项目

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

  1. package.json npm init
  2. 安装依赖包 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)

参考文章:使用passport-local-mongoose、passport实现用户验证

关于网站使用QQ、weibo等第三方登录,功能未添加(后期有需要再补,可先参考下文)

参考文章:使用OAuth2.0协议的github、QQ、weibo第三方登录接入总结

参考文章:Express结合Passport实现登陆认证

参考文章:Koa集成权限认证中间件之Passport

npm i bcrypt-nodejs --save

参考文章:nodejs 搭建 RESTful API 服务器的常用包及其简介

app.locals._ = _;

参考文章:Express 模板传值对象app.locals、res.locals

文件上传

npm i formidable --save

formidable:用于解析表单数据的Node.js模块,特别是文件上传。

参考文章:Node.js的Formidable模块的使用

***重点参考文章:通过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模块学习

参考文章:$.ajax()方法参数详解

MongoDB聚合(aggregate)

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

参考文档:MongoDB聚合

socket.io

npm i socket.io --save

Socket.io实际上是WebSocket的父集,Socket.io封装了WebSocket和轮询等方法,它会根据情况选择方法来进行通讯。

参考文章:socket.io简易教程(群聊,发送图片,分组,私聊)