——nodeJS基础

NodeJs—基础知识

参考文献

原理

一、NodeJs概述

​ 基于谷歌的v8引擎(js解释器),运行在服务器端的语言,基于js的

对比js和nodejs
(1)js运行在浏览器端,存在多个浏览器,容易产生兼容性的问题;而nodejs在服务器端只有一个运营环境,不
存在兼容性。
(2)两者都有内置(es)对象,自定义对象,宿主对象(根据执行环境的不同来区分)
(3JS用于网页中的交互效果,而nodejs用于服务器端的数据库操作、文件操作...
NodeJs的执行方式
(1)脚本模式  node c:/xampp/.../1.js;
交互模式  
node 
两次Ctrl+c  或者.exit 退出

二、全局对象

NODEJS:global
在交互模式下,声明的变量或者创建的函数都属于是全局对象下的,可以使用global访问,例如var a=1;global.a
在文件中,声明的变量或创建的函数都属于是局部作用域下的,不能使用global来访问。
JS:window
在浏览器下,文件中声明的变量或者创建的函数都属于是全局作用域下的,可以使用全局对象访问;例如 var a=1 window.a

1、console对象
global.console.log.();	//打印消息
global.console.info();	//打印消息
global.console.warn();	//打印警告消息
global.console.error();	//打印错误消息
global.console.time('自定义字符串');		//开始计时
global.console.timeEnd('自定义字符串');		 //结束计时  自定义字符串前后要保持一致
2、process对象
查看当前计算机的进程
process.arch		查看当前CPU架构  x64
process.platform	查看当前的操作系统  win32
process.env		查看当前计算机的环境变量
process.version		查看当前node版本
process.pid		查看当前的进程编号
process.kill()		杀死某一个编号的进程
3、Buffer对象(内存有这个对象叫缓冲区)

​ 缓冲区:在内存中存储数据的区域,存储网络传输时的资源
​ 创建buffer
​ var buf=Buffer.alloc(5,‘abcde’) 第一个属性字节大小,第二个属性存储的数据
​ 将buffer存储的数据转为普通字符
​ buf.toString();

4、全局函数 全局方法

​ parseInt/parseFloat/encodeURI/decodeURI/isNaN/isFinite/eval

4.1一次性定时器
开启
	var timer=setTimeout(回调函数,间隔的时间(毫秒));
	当间隔的时间到了,执行回调函数;单位是毫秒
清除
	clearTimeout(timer);
4.1周期性定时器
开启
	var timer=setInterval(回调函数,间隔的时间(毫秒));
	当间隔的时间到了,执行回调函数;单位是毫秒
清除
	clearInterval(timer);
4.2立即执行定时器
process.nextTike(回调函数);
在当前的事件循环的(2018年年底)结尾执行
var timer=setImmediate(回调函数)
clearImmediate(timer);

三、模块

​ 模块可以理解为是一个功能体(积木块)
​ 在nodejs下模块分为自定义模块、核心模块(官方提供)、第三方模块

在nodejs下任意一个文件都是一个模块,文件中的代码默认是被一个构造函数所包含。
以下代码中都是nodejs自动为文件添加的
    (function(exports,require,module,__dirname,__filename){
    	//程序员编写的代码
    })
__dirname  当前模块(文件)的完整路径
__filename  当前模块(文件)的完整路径和文件名称。
require()	引入一个模块
module	指代当前的模块对象
module.exports  当前模块的导出对象(公开),可以供其他的模块使用的属性和方法
exports 等价于module.exports
以路径开头不以路径开头
文件模块require(’./circle.js’)常用于用户自定义的模块,
如果后缀名是.js可以省略后缀名。
requier(‘querystring’)常用于引入官方提供的核心模块
目录模块require(’./02_2’)//引入目录require(‘04_2’)要求引入的目录放在node_modules中
在目录下自动引入文件如果查找不到则到上一级目录下查找
index.js;或者使用package.json文件声明main属性,
来指定要引入的文件名称。
直到顶层目录一直访问到d c 盘

四、包和NPM

NPM:Node Package Manage
包(Package):就是目录模块,里边包含有多个文件,其中就有一个文件命名为package.json的文件,是包说明文件。
自动下载 http://www.npmjs.com
①切换到下载的目录
	cd 完整的路径; 
	change directory
②要下载的目录下,按住shift键,单击鼠标右键->在此处打开powershell窗口
③使用npm安装第三方包
	*npm install 包的名称  

五、核心模块

​ nodeJS官方提供的模块,可以直接引入,不需要创建。
​ 浏览器向服务器发送请求,传递数据的一种方式
http://www.code.boy.com/product_details.html?lid=5&name=dell
​ name=tom&age=18

1、查询字符串模块—querystring

​ parse() 将查询字符串解析为对象
​ stringify()将对象转换成查询字符串

2、url模块
parse()	将url解析为对象
protocol	协议
hostname	主机(域名)
port		端口号
pathname	文件在服务器上的路径
query		查询字符串
format()	将对象转换成url
query属性对应的是对象
3、文件系统模块—fs path:路径
①fs.stat(path,(callback)=>{	//fs.statSync(path)
    path		要查看的文件路径
    callback	回调函数,里边有!两个参数!
    err		如果查看失败的错误信息
    stats		文件的状态信息
    stats.isDirectory()是否为目录
    stats.isFile()是否为文件
    查看文件的状态,通过回调函数来获取结果。

对比同步和异步区别?
同步会阻止后续代码的执行,只有方法执行完,才能继续执行后边的代码;是通过返回值来获取结果。
异步不会阻止后续代码的执行,把执行的结果放到整个程序的最后执行;是通过回调函数来获取结果。

②fs.mkdir(path,callback)/fs.mkdirSync(path)创建目录
    path		要创建的目录的路径
    callback	回调函数,只有一个参数
    err如果创建失败的错误信息

③fs.rmdir(path,callbacl)/fs.rmdirSync(path) 删除目录
    path  要删除的目录的路径
    callback 回调函数,获取删除的结果
    err 如果删除失败的错误信息

④fs.readdir(path,callback)  读取目录中的文件
    callback
    files 读取的文件 ,返回一个数组!!
⑤fs.writeFile(path,data,callback)  写入文件/创建文件
    data   要写入的数据 
    如果文件不存在,则创建文件;如果文件已经存在,则清空文件中的内容,然后写入。

六、文件系统模块—fs

①fs.unlink(path,callback)/fs.unlinkSync(path) 删除文件
②fs.existsSync(path)  判断文件是否存在  存在是true 不存在false
③fs.readFile(path,callback)/fsreadFileSync(path);  读取文件
	返回的数据是buffer形式。
④fs.appendFile(path,data,callback)/fsappendSync(path,data)   !既可以创建也可以写入
	追加写入,如果文件不存在则创建文件,如果文件已经存在,则在末尾写入数据

七、htt协议

​ 是浏览器和web服务器之间的通信协议。

1、通用头信息
Request URL:请求URL,要向服务器端请求哪个文件。
Request Method:请求的方法。 get/post
Status Code:响应的状态码
200系列 属于服务器端成功响应
300系列 响应的重定向,跳转到另一个网址
400系列 客户端请求错误
500系列 服务器端错误
Romot Address:请求的远程服务器的IP地址和端口
2、响应头信息
Connection:keep-alive;连接方式:持续连接
Content-Type:text/html;响应的类型文件
Content-Encoding:响应的文件压缩形式
transfer-Encoding:响应时的传输方式,chunked(分段传输)
Location:响应时跳转的url,通常要结合着300系列的状态码。
3、请求头信息
Accept:客户端接收的文件类型有哪些
Accept-Encoding:客户端接收的文件压缩形式
Accept-Language:客户端接收的的语言类型
Connection:客户端和服务器端的连接方式,持续连接,keep-alive;
4、请求主体

​ 可有可无,用于客户端向服务器端传递数据

八、http模块

​ 可以模拟浏览器向服务器端发起请求,也可以创建web服务器

1、模拟浏览器
http.get(url,callback);
get:			请求的方法
url:			请求的网址
callback:		回调函数(用来获取服务端的响应)
res:			响应的对象
res.statusCode:	获取响应的状态码
res.on('data',(buf)=>{ })
使用事件来获取服务器端响应的数据
buf是服务器端响应的数据,格式为buffer数据
2、创建web服务器
var http.createServer()  创建web服务器
server.listen() 分配端口,监听3000端口的变化				
server.on('request'(req,res)=>{});
//接收浏览器的请求,是一个事件,一旦有请求,自动执行
req 请求的对象
url	   请求的路径,只显示端口后的部分,不显示端口域名。
method 请求的方法,直接通过地址栏默认使用get方法
headers 请求的头信息
res响应的对象
write() 响应的内容为文本形式,向浏览器中写入文本。
writeHead(302, { } ) 第一个参数是状态码,第二个是响应的头信息,如果要跳转需要设置Location属性
end() 响应结束

九、express框架

​ 基于Nodejs,用于构建web服务器的框架
​ 官网:www.expressjs.com.cn
​ 安装: npm install express

引入第三方模块
const express=require('express');
var server=express();
server.listen(3000);
1、路由

​ 浏览器向web服务器发来请求,web服务器要根据请求的方法和请求的URL来做出响应。
​ 路由三要素:请求的方法、请求的url、响应的内容

响应的对象(res)
res.send();   响应文本,只能响应一次send,如果是数字认为是状态码。
res.File();	响应文件,必须使用绝对路径(__dirname+'/名称')
res.redirect() 响应的重定向
req.method   获取请求的方法
req.url	 获取请求的url
req.headers	 获取请求的头信息
req.query	 获取请求时以查询字符串形式传递的数据,返回的格式为对象。
2、get和post

​ get请求以查询字符串的形式传递数据,服务器端使用 req.query获取数据,结果是对象

​ post请求是通过表单提交(现阶段)的方式传递数据,服务器端通过事件形式获取数据(后期会有简单方法)

    req.on('data'(buf)=>{
        //获取的结果也是buffer数据,需要使用查询字符串解析为对象querystring.parse
    });
3、使用路由传递数据—路由传参
设置路由中接收的名称:
    server.get('/detail/:lid',(req,res)=>{
    	req.params  //获取路由传递的数据,格式为对象
    });
浏览器请求方式: http://127.0.0.1/detail/5
5就是传递的数据,使用lid来接收
(4)路由器

​ 路由在使用过程中,不同的模块可能出现相同的URL,把同一个模块下的路由挂载到特定的前缀。

例如:商品模块下的路由挂载/product,访问形式/product/list,
用户模块下的路由挂载到/user/,访问形式/user/list 
const express=require('express');
var router=express.Router;  //创建一个空的路由器
	router.get('/list',(req,res)=>{
		//往这个路由器中添加路由
	});
module.exports=router;
在web服务器下使用路由器
const userRouter=require('/user.js'); //引用路由器模块
server.use('user',userRouter);把用户路由器挂载到/user下
访问形式 /user/list
(5)中间件

​ 中间件的作用为主要的业务逻辑所服务。

分为五种:
(1)应用级中间件
应用级中间件:每一个中间件就是一个函数,需要配合其他的中间件或者路由来使用
	server.use(回调函数)  拦截所有的路由
	server.use('/detail',回调函数)拦截特定的路由
初始化一个全局变量,设置值为0,在中间件中实现变量的加1,在路由中响应变量。
	res.send();
(2)路由级中间件
用于在服务器中将路由器挂载到特定的url
	server.use('/user,userRouter')
	url       路由器
(3)内置中间件
在express中只有一个内置的中间件
server.use(express.static('要托管的目录'));
托管静态资源到某一个目录,如果浏览器端要请求静态资源,则自动会到这个目录下查找
静态资源:HTML、css、客户端js、图像
(4)第三方中间件
(5)错误级中间件

十、MySQL模块

基础命令:
		增 INSERT INTO emp VALUES(NULL,'tom'.....)DELETE FROM emp WHERE uid=5;UPDATE emp SET uname='jerry',sex=1 WHERE uid=5;SELECT * FROM emp;
进入方法:
		mysql.exe  -h127.0.0.1 -P3306 -uroot -p
1、普通连接使用MySQL
var connection=mysql.createConnection({});创建连接对象,
参数中传递mysql服务器的主机、端口、用户名、密码、选择使用的数据库。
connection.connection();执行连接
connection.query(sql,callback);sql表示要执行的SQL语句,callback回调函数,用于获取sql语句的执行结果
connection.end();执行完SQL语句,关闭连接
2、使用连接池
var pool=mysql.createPool({});创建连接池对象,需要提供服务器的主机、端口、用户名、密码、使用的数据库,以及设置连接池的大小, connectionLimit
pool.query(sql语句,回调函数两个参数err,result);执行sql语句;sql是要执行的语句,callback获取sql语句的执行结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值