Node.js保姆级教程

  • 1. Node基本概念
  • 2. 第一个node.js程序
  • 3. node创建get请求
  • 4. node创建post请求

1. Node基本概念

1.1 node.js是什么?

平常的js代码只能在浏览器运行,浏览器一关,就完犊子
Node.js 就是运行在服务端的 JavaScript

1.2 客户端与服务端交互流程

node是运行在服务端的,所以必须了解这玩意

  • 客户端向服务端发送请求
  • 服务端去数据库查询数据
  • 服务端返回给前端使用

I/O: input(输入), 往磁盘存数据,Output(输出)从磁盘中取数据

1. 如何优化整个交互过程?

  • 咱们的响应速度可以加快,比如去银行办业务,平时办业务要半个小时,现在咱们如果3分钟就能办完,是不是更快了
  • 服务器处理逻辑优化,咱们可以做个档案啥的,比如说银行的系统查询速度,与人员是相互配合的
  • 数据库优化,换更好的数据库,更好的硬件支持

2. 什么是I/O阻塞?

  • 传统的服务器是多线程的,什么叫多线程?举个生动的例子,比如咱们去大保健,非正规的,正规的咱们不去。那么是不是来一位客人,就要配一个技师,咱们一百个人去就要配一百个技师,这样体验是最好的对不,1对1服务

  • 放在服务器上,也是这样的,进来一个请求就给你一个线程,专门处理这个请求,这样成本是很大的,如果人来的多一点,那技师就忙不过来。那你就得等,这个就是I/O阻塞(对请求处理的不够及时)

1.3 node的牛逼之处在哪?

  • node就是单线程的,但是他是个超级单线程,这个技师可能有很多手,
    反正就是很牛逼,不管你来多少个人,我都可以服务,这下好了,客人不用等了,所以不会造成阻塞
  • 传统服务器对硬件要求很高,比如说大保健的地方需要配很多技师,如果没客人来,技师是不是浪费了
    node.js单线程,就一个服务员,对服务器要求不高,成本更低

1.4 node也有缺点

  • node毕竟是单线程,所以也会有个上限,举个例子,大家小时候应该知道那种声音很大的拖拉机它就是单缸的,马力很大,能上山能下地,能拉砖能栽树,开上他就是全村最靓的仔。

  • node也是如此,只适合做一些用户量不多的服务端(人数多,做分布式也可以)

  • 目前最广泛的应用:中间层(在服务器与客户端加一层),比如淘宝,网易云音乐,都有node中间层

  • Java多线程是优势,嗖嗖嗖的,贼拉快,服务端处理这块很优秀,但是对页面渲染就不行了,那咱们js不就是用来操作页面的,node又是用JS写的,所以加了一层,搭建一个node服务器成本也低,专门用于渲染页面,以及一些高并发请求

2. 第一个node.js程序

console.log('hello node.js')
console.log(this)   // this指向 {} node里面是没有window的for(let i = 0; i < 2; i++){console.log(i)
}

使用node命令运行该文件即可,如(node hello.js)

3. node创建get请求

// 做一个服务器,创建一个get请求
const http = require('http');
const querystring = require('querystring')
// 创建服务
const server = http.createServer((req, res) => {// 请求参数const method = req.method;  console.log('method', method) // Getconst url = req.url;console.log('url', url) // 获取url里的参数// 自定义添加一个属性去接收req.query =  querystring.parse(url.split('?')[1])console.log('query', req.query)  // 这里是个对象,返回要转一下res.end(JSON.stringify(req.query))
})// 监听端口
server.listen(8000, () => {console.log('8000服务开启')
})
  • 大家运行文件之后,可以尝试浏览器直接访问本地的8000端口,后面加上 “/api/blog/list?author=ouyang&keyword=a”,就可以看到返回值

4. node创建post请求

// 做一个服务器,创建一个请求
const http = require('http');
// 创建服务
const server = http.createServer((req, res) => {if(req.method === 'POST') {let postData = '';  // 接受数据// 采用流的方式(stream) => 防止数据量过大,慢慢来流动req.on('data', chunk => {// 一点一点拼接,数据是二进制的,转换成字符串postData += chunk.toString();})// 数据接受完毕,打印 req.on('end', () => {console.log('postData', postData)res.end('数据接受完成!')})// 查询数据格式(默认的)console.log('post data type', req.headers['content-type'])}
})server.listen(8000, () => {console.log('8000')
})
  • 这里是post请求,不能在浏览器里输入得到结果
  • 大家可以借助Postman发起请求(如果不太懂,请科学上网)
  • 访问本地的8000端口即可

1. 希望本文能对大家有所帮助,如有错误,敬请指出

2. 原创不易,还请各位客官动动发财的小手支持一波(关注、评论、点赞、收藏)
3. 拜谢各位!后续将继续奉献优质好文
4. 如果存在疑问,可以私信我(主页有Q)

前端涨薪必读,node.js入门保姆级教程相关推荐

  1. Unified Functional Testing(UFT)15.0.2入门保姆级教程(二),图文详解。QTP

    UFT入门之验证点和参数化 UFT15.0.2教程之侦测器(ObjectSpy)及脚本录制 请移步:Unified Functional Testing(UFT)15.0.2入门保姆级教程(一),图文 ...

  2. Unified Functional Testing(UFT)15.0.2入门保姆级教程(一),图文详解。QTP

    UFT入门之侦测器(ObjectSpy)及录制第一个脚本 实验说明 1.Quick Test Pro(QTP)11.5后更名为Unified Functional Testing(UFT) 2. 实验 ...

  3. ROS入门保姆级教程:5-ROS计算图

    ROS入门往期: ROS入门保姆级教程:1-hello world初体验 ROS入门保姆级教程:2-VScode中使用ROS ROS入门保姆级教程:3-ROS文件系统 ROS入门保姆级教程:4-ROS ...

  4. Shopify开发入门-保姆级教程

    Shopify开发入门-保姆级教程

  5. 基于SpringBoot的SSM整合案例 -- SpringBoot快速入门保姆级教程(四)

    文章目录 前言 1.设计创建数据库表tbl_book 2.创建新的SpringBoot模块,勾选相关依赖 3. 添加SpringBoot创建项目时没有提供的相关坐标 4.根据数据库表创建实体类Book ...

  6. Windows下部署最新版青龙、诺兰、傻妞入门保姆级教程

    没服务器的先自行购买,或直接电脑装.腾讯云2H4G8M首年74–点击购买 QQ交流:1014549449 --------------点击跳转 一.青龙安装 1.docker官网下载windows的安 ...

  7. Mybatis实现增删改查 -- Mybatis快速入门保姆级教程(二)

    文章目录 前言 五.配置文件完成增删改查 1.学习目标 2.入门案例环境准备 3.查询--查询所有 4.查询--根据id查询 5. 查询--条件查询 6.查询--多条件动态查询 7.条件查询--单条件 ...

  8. # CRM 开发入门(保姆级教程)-- 新建solution以及Entity、字段、视图

    1.首先应该创建一个solution(解决方案) 给solution选定/创建一个发布者(publisher) 步骤:Setting >> Solutions >> new   ...

  9. Python爬虫之入门保姆级教程,学不会我去你家刷厕所

    注重版权,转载请注明原作者和原文链接 作者:Bald programmer 今天这个教程采用最简单的爬虫方法,适合小白新手入门,代码不复杂 文章目录 今天这个教程采用最简单的爬虫方法,适合小白新手入门 ...

最新文章

  1. 闭环思维之follow through和及时反馈
  2. Linux下安装FTP
  3. BLE GAP广播(Advertising Packet)格式
  4. 如何操作SAP UI5应用Footer区域工具栏按钮的背景颜色
  5. WPF 模仿QQ音乐首页歌单效果
  6. 5月TIOBE编程榜,Java、PHP降级,C#再度上升!
  7. 深入理解C++中的explicit关键字
  8. 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
  9. 巴菲特对合伙人提过3个要求
  10. centos怎样安装mysql,Centos安装mySQL
  11. 计算机教师继续教育心得,教师继续教育培训个人心得体会
  12. 【BZOJ4011】【HNOI2015】落忆枫音 拓扑图DP,
  13. 从1加到100,1到100求和 Python代码实现方法
  14. 反锐化掩膜_带噪声抑制的反锐化掩模图像增强算法
  15. 【重学前端】CSS(一)
  16. 学习笔记 | 零基础平面设计入门
  17. HDU - 胜利大逃亡(搜索)
  18. ocr文字识别技术有什么意义
  19. 上海市促进文化创意产业发展财政扶持资金项目政策解读
  20. leetcode 1884-鸡蛋掉落-两枚鸡蛋

热门文章

  1. CUBEMX STM32F105RB U盘读写详细教程
  2. O2O商城系统,适合本地电商发展的商城系统!
  3. 百度沈抖:文心一言将通过百度智能云对外提供服务
  4. 等保测评师-等保测评工程师-发展路线(不喜勿喷)
  5. 用户画像 各维度表的结构图
  6. python判断是否包含某数字_python如何判断数组里是否有某个数字
  7. 要闻君说:阿里云联合8家芯片模组商推出“全平台通信模组”;北汽与小桔车服联合“京桔”;IBM要帮助印度公司打造5G战略!...
  8. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)...
  9. WinRar 解压缩文件官方去广告版
  10. 如何控制项目边界,与客户项目负责人结成同盟军