资讯专栏INFORMATION COLUMN

后端知识点总结——NODE.JS基础

Freeman / 2472人阅读

摘要:后端知识点总结基础不是是一种软件开发平台,它的竞争对象历史第一次有一种语言可以通吃前后端网站阿里云镜像版本年初年中年底最新版本功能强大可靠,适合大型企业级项目简单易用适合互联网项目易用适合平台性能好适合服务器端密集型项目不适合密集型项目密集

后端知识点总结——NODE.JS基础 1.Node.js
 Node.js不是JS,是一种软件开发平台,它的竞争对象JSP/PHP/ASP.NET,历史第一次有一种语言可以通吃前后端.
 网站:阿里云镜像
 https://npm.taobao.org/mirrors/node/
 版本:0.12(16年初)  4.x(16年中)  6.x(16年底)
 LTS:Long Term Support
 Current:最新版本
 
   

JSP = HTML+JAVA 功能强大可靠,适合大型企业级项目
PHP = HTML+PHP 简单易用,适合互联网项目
ASP.NET = HTML+C# 易用,适合windows 平台

       30w==2w+0.5w+20w+10w

Node.JS = HTML+”JS” 性能好,适合服务器端IO密集型项目,

                     不适合CPU密集型项目

CPU密集项目:滴滴打车,天气预报,大数据分析,大数据计算..
IO密集项目:查询,修改,删除,

2.Node运行的两种方式

(1)交互模块---简单了解(测试新功能)
REPL:输入一行代码执行一行
注意:交互模自带输出功能,不必一定要 console.log()
node 回车 进入交互模式
.exit 退出

(2)脚本模块—正式项目中使用

  把要执行所有语句编写一个文本文件中(后缀任意,没有),一次性提交node解析器执行.
  node 完整路径/x.js 回车
  提交:只要安装成node.js,重启webstorm,ws可以自动发现node.exe解析,
  新的项目和文件编写一定UTF-8


3.nodejs中特有概念—模块---(重点)

一个项目中多个”模块”,订单模块,用户模块,支付模块....

     node.js按照功能,可以把函数,对象分别保存不同文件或目录下,
     这些目录和文件在node.js称为一个“模块”
     04_node.js  05.js 
  ##注意:Node.JS每个一个模块都是一个独立构造函数,
    Node.JS解析器自动为每一个.js文件添加如下代码.
    (function(exports,require,module,__filename,__dirname){
         exports:{} 用于声明向外部导出自己成员
         require:fn 用于导入其它的模块,并且创建指定模块对象
         module: 当前模块对象
         __filename
         __dirname

var i = 10;

         var j = 11;
         console.log(i+j);

});

4.Node.js 模块中exports和module.exports对象区别是什么?

二者都可以用于向外导出自己内部成员,
但:实际向外导出成员 module.exports
exports 对应一个引用

   每个模块都可以使用自己require();引入另一个模块—底层本质是创建指定模块一个对象实例.
   08_data.js  声明二个变量一个函数 ->导出一个变量一个函数
   09_app.js   引入

5.nodejs 模块-目录模块

自定义模块的两种形式
(1)文件模块

  创建一个JS文件,如m3.js,导出其公开数据,
  其它模块可以require("./m3");引入

(2)目录模块

   方式一:创建一个目录,假设m4,其中创建index.js文件,导
          出需要公开数据。其它模块引入
          var m = require(“./m4”);
   方式二:创建一个目录,假设m5,其中创建5.js文件,导出需要
         公开数据数据,创建package.json文件 main指定启动

文件 5.js 其它模块引入

   var m = require(“./m5”);
   方式三:创建一个目录,必须名为 node_modules 
   ,其中再创建目录模块,假设 m6 其中创建 package.json
   文件,其中声明 main属性指定默认执行启动js,如6.js,
   其中导出需要公共数据,其它模块引入
   require(“m6”);
   
    
          
文件模块    目录模块(方式三)

程序结构 m1.js node_modules

    m2
   package.json
   2.js

模块名称 m1 m2
导出数据 module.exports module.exports
导入模块 var m = require(“./m1”); var m = require(“m2”);

6.Node.js 解析引擎自带 原生模块—Buffer(缓冲区)

Buffer:缓冲区,本质上是一块内存区域,用于暂存以后要用到数据
(数字,字符串,二进制图片/音频/视频),该区域称为“缓存”

分配置一个指定大小缓冲区 1024字节

建议:缓冲区大小不超过 512KB 512*1024

var buff1 = Buffer.alloc(1024);
使用一个数组创建缓冲区
var buff2 = Buffer.from([1,2,3]);
使用一个字符串创建缓冲区

var buff4 = Buffer.from(“abc”);

将一个缓冲区内容转换字符串{如果缓冲区数据是字符串}

var str = buff4.toString();

Node.js 原生模块—QueryString

 querystring模块用于处理HTTP请求URL中查询字符串
 var obj = qs.parse(str);   把查询字符串解析js对象
 var str = qs.stringify(obj) 把js对象转换为查询字符串
 

Node.js 原生模块—URL

url模块用于解析一个HTTP请求地址,获取其中各个部分
var obj = url.parse(str); 把一个URL地址为js对象
var obj = url.parse(str,true); 功能同上,并且把其中查询字符串转换

                      js obj

Node.js 原生模块—fs—(重点)

文件:在node.js 我们系统文件或者目录统称为文件
fs 模块提供对文件和目录进行,增删改查,读定文件内容
(1) 同步读写文件(阻塞)

同步读取文件内容 var data = fs.readFileSync(fileName); 同步向文件写内容 fs.writeFileSync(fileName,data);

注意:(1)如果当前写入文件并不存在,自动创建一个

  a.txt
  (2)如果当前写入目录并不存在,报错
  d:/abc/a.txt
  (3)如果当前文件己经存在内容,清空
同步向文件追加内容

fs.appendFileSync(fileName,data);

(2) 异步读写文件(非阻塞)

异步读取数据 fs.readFile(fileName,function(err,data){ });
           函数:文件读取完成后调用
           err:读取文件不存在,权限不足,
           自动创建错误对象 
     #异步写数据    fs.writeFile(fileName,data,function(err){})
                    函数:文件写结束调用
     #异步追加数据  fs.appendFile(fileName,data,function(err){})
                    函数:文件追加结束

Node.js 原生模块--http

HTTP 模块可用于编写基于HTTP协议客户端程序(即浏览器),也可以编写一个基于HTTP协议服务器(APACHE)
APACHE[1000并发量] nginx[28000] IIS[微软]

用http模块编写一个web服务器

(1)创建服务器对象        var server  = http.createServer();
(2)绑定监听端口 1-65535  server.listen(3000);
(3)接收客户端请求,      server.on(“request”,(req,res)=>{..})
(4)并且响应客户消息      res.end(str...);

req:请求对象:保存客户端请求消息
req.url 请求url地址

res:响应对象:服务器发送数据客户端,修改响应格式

三个常用对象:
(1) server 代表服务器对象

(2) req (request)请求对象,保存客户端很多信息
req.url 客户请求地址
req.method 客户请求方式
req.httpVersion HTTP版本
req.headers 请求头

(3) res (response)响应对象,保存服务器端向客户发送数据
res.statusCode = 200;
res.setHeader(); 设置响应头
res.write(); 向客户端输入响应消息主体
res.end(); 通知客户端,响应消息结束(只能一次)
常见错误:程序端口被占用
listen EADDRINUSE :::3000
解决:查找前面程序停止即可

11.node.js 第三方模块 (mysql/express)

使用node.js访问mysql服务器

为了精简NODE.JS解析器,官方没有提供访问任何数据库相关模块,

必须使用工具 npm 下载第三方模块,在www.npmjs.org 搜索关键字
Mysql 可以得到相关模块,每个模块使用说明.

示例:下载
npm install mysql  简写  npm i mysql

mysql模块使用步骤
(1)复制模块 node_modules day03根目录下
(2)加载mysql模块 const mysql = require(“mysql”);
(3)创建到数据库服务器连接

                      var conn = mysql.createConnection({})

(4)发送sql语句并且获取服务器返回结果

               conn.query(sql,(err,result)=>{});

(5)关闭连接 conn.end();

12.nodejs第三方模块express (重点)

下载express 模块
npm i express http高级模块
npm i body-parser 处理post请求
npm i cookie-parser 处理cookie
npm i express-session 处理session
npm i cors 跨域

express模块
使用官方提供HTTP模块可以创建一个web服务器应用,但此模块
非常底层,要处理各种情形,比较繁琐。推荐使用HTTP高层模块,
express—第三方模块,是一个基于node.js http模块的高层模块,简化
服务器端开发。
(1) 下载模块 npm i express
(2) 将模块内容复制项目中 day04/node_modules
(3) 加载相应模块 http/express
(4) 创建express对象,再创建服务器对象,并且绑定监听端口
var app = express();
var server = http.createServer(app);
server.listen(3000);

常规语法规则:
app.get(请求地址,回调函数);

接收客户请求 GET /index.html

app.get(“/index.html”,(req,res)=>{});

接收客户请求 POST /index.html

app.post(“/index.html”,(req,res)=>{});

示例:
以前:login.php 参数 数据库 json

$.get(“login.php”,…..);

现在:app.get(“/login.do”,(req,res)=>{

 参数 数据库 json

});
$.get(“/login.do”…..);

13.express req和res对象

res.sendFile(__dirname+文件绝对路径); =fs.read+res.write+res.end
res.send(向客户端返回html字符串响应);
res.json(obj); =setHead()+JSON.parse()+res.write()+res.end()

express GET 请求 接收参数二种方法
#GET /login.do?uid=10&uname=tom
app.get(“/login.do”,(req,res)=>{

//express为每一个req对象添加属性query
req.query.uid;
req.query.uname;

});

GET /login.do/12/tom

app.get(“/login.do/:uid/:uname”,(req,res)=>{
//express 为每个req对象添加一个params 属性
req.params.uid
req.params.uname
});

14.为了项目提高效率创建连接池

(1)创建连接池
var pool = mysql.createPool({…}); host;user;password;
connectionLimit:5 连接池中活动连接5个
建议范围:5~25
1亿(PV/1day)= 8小时=28800秒=10-100=34/s
100000000/28800/100=
(2)所有应用程序 租连接
pool.getConnection((err,conn)=>{
});
(3)归还连接 conn.release();

15.请求方式:HTTP协议
  请求方法:用于标识此次请求的目的
  GET    表示客户端想”获得”指定资源
  POST   表示客户端想”上传/添加”指定数据给服务器,

请求数据在请求主体中

  PUT    表示客户端想”放置”数据在服务器
  DELETE 表示客户端想”删除”服务器上指定资源
16.发送请求

浏览器发送GET请求

   地址栏输入url回车/表单GET/AJAX GET/超链接/js跳转/img src
 浏览器发送POST请求
   表单POST/AJAX POST
 浏览器发送DELETE请求
   AJAX-DELETE
 浏览器发送PUT请求
   AJAX-PUT
  

项目:{跨域}
两台web服务器 {nodejs 服务器业务功能}

              {apaceh 服务器接收请求响应html静态资源}

一台数据库服务器 {数据 mysql服务器}

扩展思路与知识储备

注意事项:
如果客户端跨域请求服务器资源为了保存session工作正确
需要在ajax请求添加属性
xhrFields:{withCredentials:true}

17.项目瓶颈:数据库

原理:数据库中数据保存在磁盘上的某一组文件
解决一:提供SQL查询效率

     SELECT uid,uname,age FROM xz_user;
     数据库对象:索引 提高查询效率[select];

降低更新效率[update/delete/insert]

     什么项目用:索引 查询多更新少
     索引为什么快:工作原理
     美团快递:送餐{死心眼}  数据库默认工作方式
     美团快递:送餐{机灵}   
      ALTER TABLE xz_user ADD INDEX (uname)
      SELECT uid FROM xz_user WHERE uname = “tom”;
      400w-没有加索引之前 查询一条记录 2s
      400w->加索引之后      查询一条记录 0.00002s

解决二:主从数据库服务器{一个服务器负责写数据<主>}

                      {多个从服务器负责读数据<从>}

解决三:内存级数据库服务器{NOSQL} 极高数据读写 Redis

      数据库读写速度太高->数据库压力太大{出问题} cpu 100%
      社区:php/mysql    在线人数   t_online   2 服务器down
      $phpcount = 1;  ->redis ++ --  效率很好
      

tts:学生登录 8:45~9:30 ->mysqlRedis

      微博/微信    微博[点赞]   120 Redis

(2)提高项目{PV Page View} 高性能服务器/页面静态化
Nginx/

(3)安全角度

 SQL   注入       node.js  ?
 XSS   攻击 脚本  oa[报销/申请办公用品/审批]  [确认]
                  document.all.readonly = true
 过滤用户所有输入值/所有危险字符串判断
 DDOS 攻击 向某个网站发送大量垃圾 防火墙
 解决:网店->天猫->阿里云   6G/s

(4)数据分析数据挖掘(大数据/人工智能)

18.中间件-(路由级中间件)

1.Express 是一个自身功能极简,完全是中间件构成web框架
从本质上讲一个express应用就是由中间件组成系统.

2.中间件(Middleware)是一个函数,它可以访问请求对象和响应对象
(req request,res response),可以控制请求-响应流程,有一个参数
next变量 下一个中间件

3.中间件功能包括
执行任何代码
修改请求和响应对象
终结请求-响应循环 [拦载器]
调用下一个中间件

4.中间件分类
应用级中间件(*)
路由级中间件(*)
错误处理中间件
内置中间件

5.标准语法
app.use(url,(req,res,next)=>{

});
url:拦载地址(触发地址)
req:请求对象
res:响应对象
next:调用下一个中间件或路由

6.路由中间件
路由 = 请求方法+请求地址+处理函数
示例: app.get(“/list”,(req,res)=>{…})

语法

var router = express.Router();   //创建路由中间件对象
router.get(“/find”,(req,res)=>{});

router.post(“/list”,(req,res)=>{});
module.exports = router;

app.use(“/user”,router);

http://127.0.0.1:3000/user/find
http://127.0.0.1:3000/user/list

(1)创建三个路由文件
router/userRouter.js 保存所有用户功能
router/orderRouter.js 保存所有订单功能
router/productRouter.js 保存所有产品功能

app.js
var userRouter = require(“./router/userRouter”);
var orderRouter = require(“./router/orderRouter”);
var productRouter = require(“./router/productRouter”);

app.use(“/user”,userRouter);
app.use(“/order”, orderRouter);
app.use(“/product”, productRouter);

http://127.0.0.1:3000/user/list
http://127.0.0.1:3000/order/list

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94158.html

相关文章

  • node技术栈 - 收藏集 - 掘金

    摘要:异步最佳实践避免回调地狱前端掘金本文涵盖了处理异步操作的一些工具和技术和异步函数。 Nodejs 连接各种数据库集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 编写 Node.js Rest API 的 10 个最佳实践 - 前端 - 掘金全文共 6953 字,读完需 8 分钟,速读需 2 分钟。翻译自...

    王伟廷 评论0 收藏0
  • 最近学到的前后端分离知识

    摘要:文本已收录至我的仓库,欢迎前后端分离这个词相信大家都听过,不知道大家是怎么理解的呢。流下不学无术的泪水目前我了解到的前后端分离,首先部署是分离的至少不会跟绑定在一起部署接口只返回数据关于前端这几大框架这几个我都是没有写过的,所以也就不多了。 前言 只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y ...

    MoAir 评论0 收藏0
  • 本命年一定要记得穿红裤衩:2015年总结

    摘要:年终总结结果到这个时间才写,其实也是无奈。这一年最重要的事情就是顺利从一只学生狗转职为一只社畜。四月份毕业之后以前端工程师的职位入职天猫,到现在也差不多工作一年了。 年终总结结果到这个时间才写,其实也是无奈。本来计划过年写的,没想到Steam竟然开了个农历春节特惠,然后就被各种游戏打了,辣鸡平台,敛我钱财,颓我精神,耗我青春,害我单身 以下全都是个人看法,如果有不认同的地方,请大吼一声...

    AlienZHOU 评论0 收藏0
  • 本命年一定要记得穿红裤衩:2015年总结

    摘要:年终总结结果到这个时间才写,其实也是无奈。这一年最重要的事情就是顺利从一只学生狗转职为一只社畜。四月份毕业之后以前端工程师的职位入职天猫,到现在也差不多工作一年了。 年终总结结果到这个时间才写,其实也是无奈。本来计划过年写的,没想到Steam竟然开了个农历春节特惠,然后就被各种游戏打了,辣鸡平台,敛我钱财,颓我精神,耗我青春,害我单身 以下全都是个人看法,如果有不认同的地方,请大吼一声...

    xi4oh4o 评论0 收藏0
  • 前端架构师亲述:前端工程师成长之路的 N 问 及 回答

    摘要:问题回答者黄轶,目前就职于公司担任前端架构师,曾就职于滴滴和百度,毕业于北京科技大学。最后附上链接问题我目前是一名后端工程师,工作快五年了。 showImg(https://segmentfault.com/img/bVbuaiP?w=1240&h=620); 问题回答者:黄轶,目前就职于 Zoom 公司担任前端架构师,曾就职于滴滴和百度,毕业于北京科技大学。 1. 前端开发 问题 大...

    crossoverJie 评论0 收藏0

发表评论

0条评论

Freeman

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<