项目经验:
fs.unlinkSync(path) path 网络路径
multer:
不可做全局中间件使用
reg:
用户存在时,是否可以拒绝文件
multer 如果单独使用在reg路由里面
mongodb的id 查询
let ObjectID = mongodb.ObjectID
_id : ObjectID(id)
密码加密: bcrypt
加密: var hash = bcrypt.hashSync(用户传过来的明文密码, 加盐数);
校验: bcrypt.compareSync(用户传过来的明文密码, hash); // true|false
https://www.easyapi.com 在线api文档
大后端渲染:
用户 - > 地址栏(http[s]请求) -> web服务器(收到) - > nodejs处理请求(返回静态、动态)->请求数据库服务(返回结果)->nodejs(接收)->node渲染页面->浏览器(接收页面,完成最终渲染)
模板引擎:
前端: dom操作 虚拟dom操作 二次渲染,后期多次渲染, 优点:局部渲染
jq/js/angualrJs vue/react/....... 渲染页面(数据整合到静态页面)
后端:
抓取前端静态页面 + 渲染引擎 + 数据 返回data -> send(data)
渲染引擎: jade / ejs / ....
arttemplate underscore baiduTemplate mustach .......
ejs: 模板渲染是异步的
res.render('html转换的ejs模板',{数据})
data == str
ejs模板 : 后缀名为ejs的html文件
ejs模板语法:
ejs 结构就是html
输出: <%= 数据名|属性名|变量名 + 表达式 %>
语句: <% 语句 %> 需要被<% %> 包裹
非转义输出: <%- 数据名|变量名 + 表达式 %>
https://www.npmjs.com/package/ejs
代理:
接口文档: https://www.cnblogs.com/e-cat/p/8656040.html
豆瓣:
hostname:'douban.uieee.com',//主机名
port: 443,//端口
path:'/v2/movie/top250?start=3&count=1',
method:'get'
数据代理proxy: request请求 抓取异步数据
options={
hostname:'douban.uieee.com',
port:443,
path:'/v2/movie/top250?count='+req.query.count,
method:'GET'
};
发送http[s]请求
http[s].request(配置项,回调(响应对象resHttp)) 返回请求对象reqHttp
resHttp 响应对象
resHttp.statusCode 状态码 200 OK
resHttp.headers 获取响应头信息
resHttp.setEncoding('utf-8') 设置编码方式
resHttp.on('data/end',fn) ->send给前端
});
reqHttp 请求对象
reqHttp.on('error',(err)=>{console.log(err)}); 监听请求失败信息
reqHttp.end();请求结束
socket.io
场景:
Web领域的实时推送技术,也被称作Realtime技术。这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。它有着广泛的应用场景,比如在线聊天室、在线客服系统、评论系统、WebIM等。
原理:
双向通信,前端H5api (WebSocket) + 后端net模块
API:
cn:
https://www.w3cschool.cn/socket/socket-k49j2eia.html
en:
https://socket.io/
配合express脚手架
修改www:
const SOCKETIO = require('socket.io');//创建socket实例
const io = SOCKETIO.listen(server);//监听http实例,未来3000端口下的http请求,会触发socket
module.exports = io;
注意: www 不热重启,不检查
服务端主动推送到客户端:
let io = require('../../../bin/www'); require要在需要时再引入
io.emit('mess_type',{data:'服务端的推送数据')//推送
客户端配置:
html里面引入:
<script src="/socket.io/socket.io.js"></script>
连接服务器:socket = io('http://localhost:3000');
客户端订阅
socket.on('mess_type',(data)=>{
console.log('首页_客户端收到',data)
})