node.js小整理(一)

node.js是一个基于Chrome v8引擎的JavaScript运行环境

之前我们编写的JavaScript代码都是在浏览器中运行的,所以我们可以直接在浏览器中敲代码,然后直接运行。现在学习node.js,代码不能直接在浏览器运行,而要在node环境中运行

node特点与优势

    特点:事件驱动、无阻塞的io模型

    优势:轻量高效

命令行模式和Node交互模式

     命令行模式:看到类似C:\>是在Windows提供的命令行模式,如下

           

            在命令行模式下 可以输入node 文件名.js执行一个文件

             cd        // 切换目录                        cd 文件夹       // 进入目标文件

             cd ..    //  返回上一级                    d:                  //  进入D盘

             md  新建文件夹名称    // 新建文件夹 (当前路径指向哪里 文件夹就存储在哪里 比如C:\User\Administrator> md h  新建的文件夹h存储在C盘的User下的Administrator中)  

             rd 文件夹名称  //删除文件夹

      node交互模式:看到 是在node交互模式下,如下

             

             在node交互模式下 我们可以输入JavaScript代码立刻执行

    这两种模式下运行的javascript代码有不同之处:node交互环境会把每一行javascript代码自动打印出来,但是直接运行javascript文件却不会,除非加上console.log自己打印出来

进入当前文件夹运行javascript代码的两种方法:

  •  找到当前项目文件夹并打开——>Shift+鼠标右键——>点击在此处打开命令窗口——>node+空格+文件名.js运行文件
  •  Windown+r打开cmd命令面板——>输入cd+指定文件夹(cls可以清除当前屏幕)

模块系统:

  一个文件就是一个模块,模块有作用域,在一个模块中的变量和函数对象都属于这个模块,对外是不可见的。node属于模块化的开发

  node.js常用模块:

  • http模块  引用:var http = require("http")  作用:可编写一个http协议客户端程序(浏览器),也可以编写一个基于http协议的服务端程序(apache)
  • url模块  引用:var url = require("url")  作用:将url地址各部分转换为js对象属性
  • querystring模块  引用:var querystring = require("querystring")  作用:将查询字符串转换为对象
  • fs模块  引用: var fs = require("fs")  作用:读取文件

          异步读文件:readFile(path,utf8,回调函数)           

var fs = require("fs");
fs.readFile("test.js",utf8,function(err,data){  //test.js必须在当前目录下
  if(err){
     throw err;
  else{
     console.log(data)
  }
});

   同步读文件:readFileSync(path,utf8)

var fs = require("fs")
var data = readFileSync("text.html",utf8);
console.log(data);

 异步写文件

fs.writeFile("文件路径","写入的内容",utf8,(err)=>{  //如果文件不存在,会自动创建文件  但是不能创建文件夹
console.log(err); //当输出为null表示成功
}

同步写文件

fs.writeFileSync("文件路径","同步写入",utf8)

  在fs模块中,提供同步方法是为了方便使用,那么到底使用同步还是异步呢?node环境执行的javascript代码是服务端代码,所以绝大部分需要在服务器运行反复执行业务逻辑的代码,必须使用异步代码

下面了解一下下几个概念

 IO:也就是input和output电脑的输入输出,由于网络中传输的都是字符串,io在服务器中可以理解为读写操作

 并发:在一段时间内有几个程序都是属于启动到运行完毕之间的状态

异步分两种:异步io和异步非io

   异步io:想要了解这个概念,首先知道进程和线程,进程是为运行当中的应用程序所提供的运行环境,一个运行当中的应用程序,至少会有一个进程所对应。线程是用来运行程序中的代码的,一个线程只能在一个时间内做一件事。node是单线程的异步操作 是用异步代替了多线程(多线程调试复杂) 异步的io操作:ajax 网络操作 fs

  异步的非io操作:setTimeout setInterval(只有这两个)

   node程序运行过程:主线程一直在循环,知道队列里面没有代码,程序就结束了 子线程一直在线程池里休息,用来执行异步的io操作  子线程:a.在线程池里休息  b.异步io进来,解决异步io操作  c.子线程会把异步io的操作结果callback到队列中  d.继续回线程中休息

 事件驱动:node执行代码时,会把代码放入队列中,事件循环程序把队列同步代码先执行,同步代码执行后才会执行异步代码

 一个简单服务器的搭建  

const http = require("http"); //引入http模块
http.createServer(function(req,res){ //开启本地http服务 监听相应端口
  res.writeHead(200,{"Content-Type" : "text/html;charset=utf8"})
  res.end("我是一个服务器");  //结束请求 只能有一个
}).listen(3000);

   

猜你喜欢

转载自www.cnblogs.com/jrrrrr/p/9300452.html