node基础介绍

node基础介绍

node概念:

​ node是让javascript可以触及到服务器端的一个运行环境

node特性:

  1. 单线程 每次链接一个用户node都不会创建一个新线程只会用一个;
  2. 非阻塞式(io) io 输入输出 阻塞式io:网络请求的时候,数据库操作的时候,文件读取的时候 非阻塞式io: node在访问高io操作的一些内容时 不会等待他的完成,而是继续后面的操作,当完成之后会通过回调函数进行返回 特点:保证高效运行当前线程,不会造成浪费。
  3. 事件驱动 通过事件驱动整个程序的进行。 由于node是单线程 所有把高io的操作,会移动到事件队列中进行等待完成。完成后就会通过回调函数进行处理(官方名字:事件环)

node擅长的应用:

  1. 高并发

  2. 高io密集型应用

    (如:聊天室、豆瓣的站内信、功夫熊app)

node不擅长 :

​ 金融项目 银行项目 国家重要信息通信项目

node如何运行js:

  1. REPL 交互式解释器 可以在cmd中直接运行javascript;

    注意:如果你要写多行的话 结尾的内容必须要放在最后。

思考:

js传统运行方式:通过html来引入js来运行

node可以直接运行js

魔术变量 双底杠__

​ __filename 当前运行的js脚本的文件名(可以输出当前运行的这个文件在电脑硬盘中的绝对路径)

​ __dirname 当前运行的js脚本所在文件夹的路径(不包含文件名)

node中的模块

模块是什么:一个js我们就可以称之为一个模块(把一个逻辑中或者式一个功能点中的内容拆分到多个文件中js)把这些细小的js文件拼装成一个整体的过程就是模块化开发。

模块有两种:
  1. 自定义模块

    (1)暴漏(抛出) exports(返回的是模块化函数)或module.exports(模块本身)

    ​ 通常情况下都是使用module.exports(模块本身);

    (2)使用require()来引用;

  2. 内置模块

    Fs—文件系统 对系统上的文件进行读写操作----require(“fs”)

    ​ 同步:同步操作会阻塞后续代码的实行;在遇到错误的时候后面的代码不会继续进行;

    ​ 异步:异步操作不会阻塞后续代码;在遇到问题的时候还是会进行;

    目录操作

    ​ (1)读取目录

    ​ readdirSync(path//必选的路径) 同步读取

    ​ readdir (path//必选的路径,options//可选的参数,callback(err,ok)//成功之后的回调函数) 异步读取

    ​ (2)创建目录

    ​ mkdirSync() 同步创建目录

    ​ mkdir(path//必选的路径,mode//可选的参数,callback(err)//没有成功信息) 异步创建目录

    ​ (3)重命名目录

    ​ rename(“修改的文件路径”,“新名字”,回调)

    ​ (4)删除目录

    ​ rmdir(“删除的文件路径”,回调) //删除目录的时候,只能删除空的目录

    文件操作

    ​ (1)文件的写入 writeFile(filename,data,options,callback)

    ​ filename:文件名 data:写入的数据 options:可选,编码默认utf-8 callback:回调

    ​ 如果文件不存在就新建,如果文件存在就会进行内容替换(options中写{flag:“a”}可以设置为追加);

    ​ (2)文件的读取 readFile(“读取的文件”,“字符编码”,callback)

    ​ (3)文件的删除 unlink(“删除的文件路径”,回调);


    http模块----创建服务器(服务器:性能非常稳定的计算机)----require(“http”)

    创建服务器

    ​ createServer() 创建服务器 .listen(端口)

    ​ request接受 response响应

    var http = require("http");
    http.createServer((req,res)=>{
    	//1.设置响应头  http:状态值
    	res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
        res.end("服务器创建成功!");
    }).listen(8848)
    

    创建完后可以干嘛----可以进行前后端的交互了;


    路由

    通过url路径来区分不同的请求,从而来进行功能上的分发。

    url模块—对当前的url进行操作

    var http = require("http");
    var url = require("url");
    http.createServer((req,res)=>{
    	//1.设置响应头  http:状态值
    	res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
        
        //读取url信息  url.parse(req.url你请求信息的固定写法,true把url的数据转换成)
        var urlPath = url.parse();
        //当运行之后访问发现url返回了两次
        //console.log(urlPath)
        //解决二次请求
        if(urlPath.pathname=="/第二次返回的内容"){
           		return;
           }
        //设置路由
        if(urlPath.pathname=="/register"){
           		res.end("注册成功");
           }
        if(urlPath.pathname=="/login"){
           		res.end("登录成功")
           }
        
        console.log(urlPath);
        res.end("服务器创建成功!");
    }).listen(8848)
    

同步问题:

// 在程序中如果出错后面的不执行,那么会造成程序的崩溃。

// 解决同步出错的方法使用try{可能会出错的代码}catch(error){出错后的信息}

异步问题:

//在node的异步操作中,有一个叫做错误优先的原则,在回调中的第一个形参表示错误,默认为null;

//解决方式

if(err){
	console.log("目录读取失败");
}else{
	console.log(ok);
}

扩展

​ 前端语言:对数据进行展示

​ 后端语言:对数据进行处理

问题扩展(常见面试题)

多个回调函数层层嵌套----回调地狱

回调地狱会造成代码的可读性非常的差 在node中因为是非阻塞式io 所以node中经常会有回调地狱;

如何解决回调地狱:

promise asys/awiat 蓝鸟插件。。。。

promise 简单来说就是一个容器

​ 保存的是未来才会结束的事件(保存的是异步操作)promise对象向可以将异步操作以同步操作的流程来执行,

var promise = new Promise((resolve,reject)=>{
		//异步处理
    	//异步处理完后
    	resolve("成功之后调用");
    	reject("失败的时候调用");
})
Promise()
    .then((ok)=>{
    console.log(ok);
})//成功的时候调用
    .catch((err)=>{
    console.log(err);
})//失败的时候调用

前几周有事情忙,导致博客这几周都没写了(我是不会承认我懒了的,dui~我没懒)。当然我又双叒叕跨过了一个门槛,这让我松了一口气的同时,心里一紧,因为我认识的小伙伴们都已经找到了自己的工作。我也不知到我当初的选择是对是错,(后悔是不可能的)就继续坚持下去。我前辈教了我一句话:“如今你一定会感谢曾经努力的你!”。so saonian 人生还很长,认真的走下去。


小故事没找到,故事图也不错:
(我找来的图,原作者在图上)
加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值