Node.js 基础

172 阅读5分钟

1、Node.js概述:

      不是js,但是语法和javascript非常相似,他的竞争对手是PHP/JAVA/C++/PYTHON... - 历史上第一次一门语言可以通吃前后端
  做的功能绝对不是特效,做的事和服务器端语言一致(和数据库进行交互)
	目的:
	  1、使用代码搭建一个服务器(文件可以放在任何位置)
	  2、node.js如何操作数据库
	  3、全站一条龙

2、Node.js安装:node-v12.1.0-x64.msi 一步到位

 官网下载:[Node.js (nodejs.org)](https://nodejs.org/en)
 下载其他版本:(https://nodejs.org/download/release/v版本号/)
  版本:16年初(0.1216年中(4.xx)	16年底(6.xx) - 更新速度非常快(但是其实并没有加什么新东西)
  检查:打开cmd 输入:node -v; - 查看版本,如果有版本号说明安装成功
  其实我们安装的这个node.js只是一个运行环境而已

3、Node.js如何运行:

1、交互模式 - 临时测试  
	打开cmd输入:node,就可以开始敲你的"js"代码了

2、脚本/文件模式 - 正式开发中:
	1、先创建xx.js,里面书写你自己的代码
	2、打开cmd输入:node 文件绝对路径

3、编辑器有插件:
	1、vscode:code runner
	2、HBuilder:nodeclipse
	插件想要成功,至少前两个方式要成功才可以
	

4、Node.js知识点:

1、js 和 node 的区别:
	相同点:都可以使用一切ecmascript的操作,包括一切API都可以使用,放心大胆的使用es6的语法(服务器端不存在浏览器,不会有老IE)
	不同点:1、javascript:BOM DOM;
		2Node.js:虽然不能使用BOM DOM,但是他却又10万个以上的模块

2、模块:每一个.js文件,都可以称之为叫做一个模块
	1、模块化开发:如果以一个网页来说,我们可以按照功能分为很多个模块:商家模块、产品模块、促销模块、用户模块...
		       分工合作:将每个模块就给对应的人完成,最后再由主模块进行引入
		每一个模块都有一个操作,可以用于公开/暴露自己的成员
			1exports.属性名=值
			2module.exports={
				属性名:值,
				...
			   }
			
		每一个模块都有一个操作,可以用于引入其他模块:
			var obj=require("./文件名");//必须加上./

	
		笔试题:exportsmodule.exports有什么区别
			都是用于暴露公开自己的成员的
			但是:exports={} 这写法是错误的
			node.js底层有一句话:exports=module.exports
			其实真正做的公开功能的是module.exports
			如果你使用了	     exports={},替换了module.exports,不在具有公开的功能

	2、模块的分类:
		1、官方模块 - 今日重点,大概几十个,重要的只有几个 
		2、第三方模块 - 多到数不清,提供了很多很多官方没有的东西,有一个网址npm
		3、自定义模块

		node.js最大的特点:
			1、快、非常快 - 以前最快的是php,node.js速度是php的十六倍
			2、为什么快:1、因为官方提供的东西很少,甚至连数据库操作都没有
				     2、使用google浏览器v8引擎

	3、官方模块:不需要下载,在你安装node.js环境时已经带上了,但是某得模块可能需要引入,引入时不要加./
	   1Global模块
		不需要引入,直接可以使用:
		提供:
		  1、三种定时器(IntervalTimeoutImmediateImmediate 底层:Timeout延时为0,立刻执行,但是毕竟异步操作,不会卡主后续代码
		  2console对象

	   2、querystring模块:查询字符串
		需要引入:var qs = require('querystring');
		提供了解析url查询字符串部分的功能
		var obj=qs.parse("查询字符串");
		想要获取前端传来的每一部分:obj.键名;
		垃圾:如果前端传来的是一个完整的网址,他就解析不了了
		
	   3、url模块: - 小重点
		需要引入:var url = require('url');
		提供了解析完整的url的功能
		var objurl=url.parse("完整的网址",true);
		//加上true,自动调用querystring模块的parse方法,进行查询字符串部分变为一个对象
		真正重要的有两个点:
			1、查询字符串:objurl.query.键名 - 拿到前端传来的数据
			2、路由/请求地址:objurl.pathname - 下午会搭配上fs模块(文件系统)和http模块(服务器)实现代码搭建服务器和文件系统

	   4Buffer模块:缓冲区,可以将数据(字符串、数字、图片、HTML...)变为一个16进制的数字 - node中的一个新的数据类型
		不需要引入,直接可以使用:
		我们绝对不会主动的使用buffer的任何操作,但是后面我们的一些API可能会导致我们得到的结果就是一个buffer,我们不认识,node.js的大部分API都是支持buffer操作

	   5、fs模块 - 大重点:文件系统:对文件增删改查
		需要引入:var fs = require('fs');
		
	       *异步读取文件:fs.readFile("文件路径",(err,buf)=>{
					buf->读取到的内容
			      })

		异步写入文件:fs.writeFile("文件路径","新内容",(err)=>{ - 会替换原有的内容
					console.log("写入完毕后续操作")
			      })
				
		异步追加文件:fs.appendFile("文件路径","新内容",(err)=>{ - 会替换原有的内容
					console.log("写入完毕后续操作")
			      })

		异步能够最大的发挥node.js的特点(快)

		注意:vscode写文件相对路径有可能会失败:绝对路径node.js提供了一个全局变量:
			__dirname+"/你的文件的相对路径"


	   6、http模块 - 超级重点:搭建服务器
		固定步骤
		需要引入:var http = require('http');
		var app=http.createServer();//创建服务器应用
		app.listen(80);//设置了此服务器应用的端口号为80
		app.on("request",(req,res)=>{
			req.url 此属性记得使用url模块的parse方法分别解析出路由和查询字符串
			res.end();//响应方式,此方法一个请求只能有一个响应
		})

	   ***注意:node.js搭建服务器和文件系统,所有的连接(href和src)其实都是一个请求路由
               
      

5、Node.js高版本(v18以上)跑低版本项目

"scripts": {
  "serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
  "build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
}