摘要:后端知识点总结基础不是是一种软件开发平台,它的竞争对象历史第一次有一种语言可以通吃前后端网站阿里云镜像版本年初年中年底最新版本功能强大可靠,适合大型企业级项目简单易用适合互联网项目易用适合平台性能好适合服务器端密集型项目不适合密集型项目密集
后端知识点总结——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密集项目:查询,修改,删除,
(1)交互模块---简单了解(测试新功能)
REPL:输入一行代码执行一行
注意:交互模自带输出功能,不必一定要 console.log()
node 回车 进入交互模式
.exit 退出
(2)脚本模块—正式项目中使用
把要执行所有语句编写一个文本文件中(后缀任意,没有),一次性提交node解析器执行. node 完整路径/x.js 回车 提交:只要安装成node.js,重启webstorm,ws可以自动发现node.exe解析, 新的项目和文件编写一定UTF-83.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”);
Buffer:缓冲区,本质上是一块内存区域,用于暂存以后要用到数据
(数字,字符串,二进制图片/音频/视频),该区域称为“缓存”
建议:缓冲区大小不超过 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) 同步读写文件(阻塞)
注意:(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
解决:查找前面程序停止即可
使用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(请求地址,回调函数);
app.get(“/index.html”,(req,res)=>{});
接收客户请求 POST /index.htmlapp.post(“/index.html”,(req,res)=>{});
示例:
以前:login.php 参数 数据库 json
$.get(“login.php”,…..);
现在:app.get(“/login.do”,(req,res)=>{
参数 数据库 json
});
$.get(“/login.do”…..);
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/tomapp.get(“/login.do/:uid/:uname”,(req,res)=>{
//express 为每个req对象添加一个params 属性
req.params.uid
req.params.uname
});
(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();
请求方法:用于标识此次请求的目的 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}
原理:数据库中数据保存在磁盘上的某一组文件
解决一:提供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 ->mysqlRedis
微博/微信 微博[点赞] 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
摘要:异步最佳实践避免回调地狱前端掘金本文涵盖了处理异步操作的一些工具和技术和异步函数。 Nodejs 连接各种数据库集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 编写 Node.js Rest API 的 10 个最佳实践 - 前端 - 掘金全文共 6953 字,读完需 8 分钟,速读需 2 分钟。翻译自...
摘要:文本已收录至我的仓库,欢迎前后端分离这个词相信大家都听过,不知道大家是怎么理解的呢。流下不学无术的泪水目前我了解到的前后端分离,首先部署是分离的至少不会跟绑定在一起部署接口只返回数据关于前端这几大框架这几个我都是没有写过的,所以也就不多了。 前言 只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y ...
摘要:年终总结结果到这个时间才写,其实也是无奈。这一年最重要的事情就是顺利从一只学生狗转职为一只社畜。四月份毕业之后以前端工程师的职位入职天猫,到现在也差不多工作一年了。 年终总结结果到这个时间才写,其实也是无奈。本来计划过年写的,没想到Steam竟然开了个农历春节特惠,然后就被各种游戏打了,辣鸡平台,敛我钱财,颓我精神,耗我青春,害我单身 以下全都是个人看法,如果有不认同的地方,请大吼一声...
摘要:年终总结结果到这个时间才写,其实也是无奈。这一年最重要的事情就是顺利从一只学生狗转职为一只社畜。四月份毕业之后以前端工程师的职位入职天猫,到现在也差不多工作一年了。 年终总结结果到这个时间才写,其实也是无奈。本来计划过年写的,没想到Steam竟然开了个农历春节特惠,然后就被各种游戏打了,辣鸡平台,敛我钱财,颓我精神,耗我青春,害我单身 以下全都是个人看法,如果有不认同的地方,请大吼一声...
摘要:问题回答者黄轶,目前就职于公司担任前端架构师,曾就职于滴滴和百度,毕业于北京科技大学。最后附上链接问题我目前是一名后端工程师,工作快五年了。 showImg(https://segmentfault.com/img/bVbuaiP?w=1240&h=620); 问题回答者:黄轶,目前就职于 Zoom 公司担任前端架构师,曾就职于滴滴和百度,毕业于北京科技大学。 1. 前端开发 问题 大...
阅读 3402·2023-04-26 02:41
阅读 2444·2023-04-26 00:14
阅读 2822·2021-08-11 10:22
阅读 1274·2019-12-27 11:38
阅读 3570·2019-08-29 18:34
阅读 2374·2019-08-29 12:13
阅读 2950·2019-08-26 18:26
阅读 1833·2019-08-26 16:49