node知识点总结(一)
2021/11/17 17:09:59
本文主要是介绍node知识点总结(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Node.js重要知识点总结(一)
一、Node.js基础
1.Node.js是什么?
node.js不是一门语言,不是库,也不是框架,Node.js是一个javascript运行环境,简单点来讲就是Node.js可以解析和执行javascript代码,以前只有浏览器可以执行javascript代码,也就是说现在的javascript代码可以脱离浏览器来进行,这一切都归功于Node.js。
浏览器中的javascript:ECMAScript、BOM、DOM
Node.js中的javascript:只有EcmaScript
Node.js可以进行服务器后台的开发,命令行工具,游戏服务器等…
2.Node.js特性
Node.js可以解析js代码(没有浏览器级别的限制),提供了很多系统级别的API,如:
文件的读写操作、进程的管理、网络通信等…
举例:
浏览器对ajax网络请求有同源的限制 浏览器不能进行文件读写的操作,但是Node.js可以 Node.js可以进程管理,管理(process模块) 最主要的是进行http/https通信
3.Node相关工具
NVM–node版本控制管理工具,通过nvm可以安装和切换不同版本的node.js。
NPM–node.js的包管理工具
4.模块化commonJs
Node.js有三类模块:内置的模块,第三方的模块,自定义的模块
内置的模块又称核心模块:如path/http/os/url
第三方的模块:需要使用npm install下载并引入,比如:express/art-template
自定义的模块:我们自己编写的js文件
模块定义、接口暴露和引用接口 在node.js中没有全局作用域,模块与模块之间互不干扰的,这样就造成一个问题,怎么样才能访问其他的自定义模块呢?如果想让外部可以访问模块里面的属性和方法,就必须在模块里通过向外暴露接口exports或者module.exports的方式向外暴露,这样再通过require()方法把需要的模块引入,就可以访问到内部的方法和属性了。 module.exports={}//require('./js') exports.属性/方法=值 //require()方法有两个作用,第一个是加载并执行js模块的代码,第二个是导入js模块的方法和变量
5.常用的内置模块
1.url: 常用的两个方法:url.parse()--解析url成对象 url.fromat()--把一个对象格式化为一个url字符串地址 2.queryString: queryString.parse()--将url的参数解析为对象格式 queryString.stringify()--将对象格式的query转化为字符串格式 queryString.escape()--将参数解析为二进制形式 queryString.unescape()--将参数不解析为二进制,转化为正常格式 3.http/https: ip地址和端口号:ip地址是用来定位计算机的,端口号是用来定位具体的应用程序,所有的互联网的应用程序都需要占用一个端口号,计算机默认的端口号尽量不要访问。 启动服务器:const http=require('http') const server=http.createServer() server.on('request',(req,res)=>{ res.end('ok') }) server.listen(8000,()=>{ console.log('8000端口启动完毕!') }) request请求处理函数:需要接受两个参数:request和response,一个是请求对象,可以用开获取客户端的一些请求信息,一个是响应对象,用来给客户端发送一些响应信息。//相应的内容是字符串或者二进制buffer Content-Type:服务器发送的数据默认是utf-8编码的,浏览器在不知道相应内容的编码的情况下,会按照当前操作系统的编码解析,中文操作系统的默认编码gbk,在http协议中,Content-Type就是用来告诉浏览器我给你发送的数据内容是什么类型,不同的资源对应的Content-Type是不一样的。 Content-Type工具:https://tool.oschina.net/commons 4.fs:file-system文件系统的意思 浏览器并不具备读取文件的能力,但是node.js是可以读取文件进行操作的。在Node中想要读取文件,必须引入fs模块,fs.readfile()用来读取文件,fs.writefile()用来写入文件,文件中的存储都是二进制数据,用data.toString()方法转化为字符串. const fs=require('fs') fs.readFile('../../../node知识点总结.md',(err,data)=>{ if(err){ console.log('读取文件失败') } console.log(data.toString()) }) fs.writeFile('./readme.md','你是最棒的',(err,data)=>{ if(err){ console.log(err) } console.log(data) }) 5.path:路径操作模块 基本操作: path.parse(url)--把路径转化为对象 root:根路径 dir:目录 base:包含后缀名的文件名 ext:后缀名 name:不包含后缀名的文件名 path.dirname()--获取路径的目录部分 path.basename()--获取路径的文件名,默认包含扩展名 path.extname()--获取路径的扩展名部分 Path.join()--拼接路径(第二个参数会自动判断/是否多余) 6.body-parser:body post解析中间件 主要是为了处理Post请求体 安装:npm i body-parser 引入:const bodyParse = require("body-parse") 配置:// parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json()) 使用:router.post('/login',function(req,res){ console.log(req.body) }) 7.events: 下载:npm i events 引入:const EventEmitter=require('events') 使用:class MyEventEmitter extends EventEmitter{} const event=new MyEventEmitter() event.on('play',(value)=>{ console.log(value) })//自定义事件 event.emit('play','movie')//触发我们的自定义事件 在需要的时候这样调用就可以触发我们的自定义事件,满足我们的某种需求 并且支持定义多个相同的事件,同时也会触发多次
6.中间件–代理服务器(跨域)
const http = require('http') const server = http.createServer() const fs=require('fs') const {createProxyMiddleware}=require('http-proxy-middleware') server.on('request', (req, res) => { if(req.url==='/'){ fs.readFile('./server.html',(err,data)=>{ res.end(data) }) } const urlStr=req.url if(/\/vips-mobile/.test(urlStr)){ const proxy=createProxyMiddleware('/vips-mobile',{ target:'https://mapi.vip.com', changeOrigin:true }) proxy(req,res) }else if(/\/api/.test(urlStr)){ const proxy2=createProxyMiddleware('/api',{ target:'https://m.lagou.com', changeOrigin:true }) proxy2(req,res) }else{ console.log('error') } // res.end('ok') }) server.listen(5500, () => { console.log('5500端口启动完毕!') })
7.Node爬虫
通过node也可以爬虫,服务器的访问是没有同源政策的,因此可以发送网络请求接口获取网页数据 这里简要说明一下简单的爬虫,后续会继续说明node爬虫的实现过程及其细节 const http=require('http') const server=http.createServer() const https=require('https') const cheerio=require('cheerio') function filterData(data){ const $=cheerio.load(data) $('.section-item-box p').each((index,el)=>{ console.log($(el).text()) }) } server.on('request',(req,res)=>{ let data='' https.get('https://www.meizu.com',(res)=>{ res.on('data',(d)=>{ data+=d }) res.on('end',()=>{ filterData(data) }) }) res.end('hello') }) server.listen('8000',()=>{ console.log('8000端口启动完毕') })
8.node中的其他成员–(__dirname和__filename)
__dirname:动态获取当前模块文件所处目录的绝对路径 __fiename:动态获取当前文件的绝对路径 在文件操作中,使用相对路径是不可靠的,因为node中文件操作的路径被设计为相对于执行node命令所处的路径。为了解决这个问题,需要使用__dirname()或__filename()把相对路径变为绝对路径.(绝对路径不受影响)
ame和__filename)
__dirname:动态获取当前模块文件所处目录的绝对路径 __fiename:动态获取当前文件的绝对路径 在文件操作中,使用相对路径是不可靠的,因为node中文件操作的路径被设计为相对于执行node命令所处的路径。为了解决这个问题,需要使用__dirname()或__filename()把相对路径变为绝对路径.(绝对路径不受影响)
这篇关于node知识点总结(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程