代码运行流程

首先开启服务器,在npm run dev的时候运行了bin目录下的www.js文件,启动http服务

当前端进行访问的时候,经过app.js文件

App.js是整个项目的入口文件,首先判断这个用户在http的header头中带了那些验证的信息,例如带了userid(cookie),有userid就赋值给req.session和存入redis,没有就创建一个

验证完信息后,进入每个模块的处理区间,例如博客、用户

例如进入到了博客区间,通过router文件blog.js,通过req.query获取到路由,进入到当前的路由区间

通过req.body或req.query获取接口的参数,调用控制器的方法,根据参数处理数据

通过封装的处理数据模块返回固定的数据格式(succesfulModel、errorModel)

App.js中调用handleBlogRouter获取到处理后的数据,转换为字符串,然后返回给前端

Cookie

什么是cookie,cookie是存在浏览器的一段字符串,格式k1=v1;k2=v2;可存储结构化数据

Cookie的大小,5kb

Cookie不允许跨域,跨域不共享

每次发送http请求,会将请求域的cookie一起发送给server

Server端可以修改cookie,并返回给浏览器

浏览器也可以修改cookie,通过document.cookie,可以限制浏览器对cookie的写入,写入的不能覆盖受限制的cookie

Cookie中不要暴露用户的敏感信息

Session

Session中存储用户的信息,通过cookie中获取到的信息,查询出需要验证的信息

Session存放在数据库中,如果存储在进程的内存中,会导致进程卡死,缓慢

正式上线会启用多进程,多进程中的内存无法共享

系统会限制进程的内存

Redis

Web server最常用的缓存数据库,数据存放在内存中

相比mysql读取速度快(内存读取的速度比硬盘快的多)

成本高,可存储的数据量更少

Nginx

Nginx反向代理,安装nginx,配置nginx.conf文件

记录日志

日志有可能比较大,存储在redis或mysql中都不太合适,存在redis中,如果文件比较大,相对会消耗内存,导致程序卡顿或缓慢,存储在mysql中,读取和查看不方便,不如文件直接,迁移到其他服务器,又要搭建mysql环境等

存在在文件中,解决文件过大的问题,通过管道的方式进行传输,一点一点的流到需要接收的端

做定时任务,使用linux的crontab,*****command, 分 时 天 月 星期 命令

日志逐行读取,使用readline

Server安全

预防sql攻击,例如注释掉部分条件语句,通过传进来的sql

Xss攻击,往服务器中添加js代码,预防主要是过滤掉<>尖括号,转换成html格式,安装xss

密码加密

万一数据库被攻破,最不应该泄露的就是用户信息

攻击方式:获取用户名和密码,再去尝试登录其他系统

预防措施:进行密码加密,致使拿到密码也不知道明文

async await 要点

await后面可以追加promise对象,获取resolve的值
await必须包裹在async函数里面
async执行也是返回的也是一个promise对象
try-catch可以截获promise中的reject的值

github仓库地址:https://github.com/Sun-Traget/Node.js-Web-Server.git

Node.js从零开发Web Server博客项目笔记相关推荐

  1. Node.js 从零开发web server博客项目--项目初始化

    本篇博客记录了<Node.js 从零开发web server博客项目>的原生开发系列内容. 开篇主要介绍原生项目的搭建,以及初步的项目结构设计. 一.项目初始化 新建项目目录,并进入到项目 ...

  2. 企业级博客项目笔记(二)

    企业级博客项目笔记(二) 一.数据持久化 1.JPA简介 JPA(Java Persistence API)是用于管理Java EE 和Java SE 环境中的持久化,以及对象/关系映射的Java A ...

  3. 初出茅庐的小李第113篇博客项目笔记之机智云智能浇花器实战(2)-基础Demo实现

    初出茅庐的小李第112篇博客项目笔记之机智云智能浇花器实战(1)-基础Demo实现 接(1) 继电器实现 继电器原理图 继电器采用的是5V继电器,控制端是RELAY-1 继电器代码实现 #includ ...

  4. PHP系统开发/Web文章博客

    PHP前后端交互 | web文章博客 前言 环境部署 一.登录 二.注册 三.主页 四.详情 五.编辑 六.删除 七.注销 八.发表 全部文件 总结 前言 一.项目需求: 做个基础的页面,文章博客we ...

  5. 【做项目】基于SpringBoot从零开发的个人博客 —— 从技术选型到部署实战(附学习路线)

    文章目录 一.前言 1.1 背景介绍 1.2 寻找开源项目 1.3 技术选型 二.正式开发 2.1 看懂项目并模仿 2.2 正式动手敲之前,内化成自己的项目,对其设计并架构 2.3 动手编写 三.博客 ...

  6. 图解基于 Node.js 实现前后端分离 - CSDN博客

    因为会上出了个意外,ppt图片全部丢失,只好对着白板跟大家交流了半个多小时.由于我做演讲不喜欢写太多的文字,没有图片的情况下讲漏了一些内容.这篇文章是我在会上分享内容对照ppt进行地整理. 基本介绍 ...

  7. 初出茅庐的小李第114篇博客项目笔记之机智云智能浇花器实战(3)-基础Demo实现

    机智云智能浇花器实战(3)-基础Demo实现 链接:机智云智能浇花器实战(2)-基础Demo实现 BH1750光照传感器原理图 BH1750传感器代码 #include "bh1750.h& ...

  8. 初出茅庐的小李第112篇博客项目笔记之机智云智能浇花器实战(1)-基础Demo实现

    项目文件夹框架 API文件夹---------------------------------------放置各种传感器驱动代码文件夹 CMSIS文件夹------------------------ ...

  9. java web论文_(定稿)毕业论文基于JavaWeb技术博客项目的设计论文(完整版)最新版...

    <[毕业论文]基于Java Web技术博客项目的设计论文.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于Java Web技术博客项目的设计论文(完整版)> ...

最新文章

  1. java 非模态_Qt 之 模态、非模态、半模态窗口的介绍及 实现QDialog的exec()方法
  2. RHEL6.4更改为CentOS6.4的yum源
  3. gitlab linux版本下载,Linux安装GitLab版本控制软件
  4. 2019年第十届蓝桥杯 - 省赛 - C/C++大学B组 - D. 数的分解
  5. Linux基础命令---cpio
  6. Android 自定义控件之腾讯安全卫士扫描
  7. 后端技术:SpringBoot 中实现跨域的5种方式
  8. 【Linux系统编程学习】 动态库的制作与使用
  9. 构造方法的应用 0107 c#
  10. word加水印铺满java,Word 2010文档中让水印铺满整个页面的设置方法
  11. 组合与继承c++_组合与继承
  12. Nhibernate学习的第一天
  13. 监控指标分类汇总归纳
  14. [Canvas]空战游戏进阶 增加发射子弹 敌机中弹爆炸功能
  15. 模型预测控制与机器学习
  16. 图片太大怎么缩小kb?图片压缩技巧
  17. hau 1825 第一道拓扑排序题
  18. FAF世链区块链大会|DarkHorse商学院院长何沐庭:看好DeFi的未来
  19. ipad未能与itunes连接到服务器,ipad无法连接itunes store怎么办
  20. macOS Xcode8安装RVM,安装Ruby,安装/卸载Cococapods全程详解

热门文章

  1. An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中一种基于蚁群算法的能量有效路由)
  2. Effective Java 在工作中的应用总结
  3. 埃森哲携手阿里云,采用K8s容器云服务为客户提供无限弹性
  4. 独家下载 |《领军行业大数据及AI实战》解锁九大行业领军企业云上大数据及AI实战
  5. 小时候都想当科学家后来只有他做到了——对话阿里云MVP朱祺
  6. 使用Kubernetes容器服务在云上搭建AI推理环境
  7. 如何实现“持续集成”?闲鱼把研发效率翻了个翻
  8. 如何合理的规划jvm性能调优
  9. 你想知道的容器混合云问题,答案都在这里!
  10. 程序员应如何理解高并发中的协程