node.js

Posted 1234wu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js相关的知识,希望对你有一定的参考价值。

1.node是什么?

  Node 是一个让 javascript 运行在服务端的开发平台, 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。 Node用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

 

  1) 什么是 V8?

  V8 JavaScript 引擎是 Google 用于其 Chrome 浏览器的底层 JavaScript 引擎。实际上,JavaScript 引擎负责解释并执行代码。Google 使用 V8 创建了一个用 C++ 编写的超快解释器,该解释器拥有另一个独特特征;您可以下载该引擎并将其嵌入任何应用程序。V8 JavaScript 引擎并不仅限于在一个浏览器中运行。因此,Node 实际上会使用 Google 编写的 V8 JavaScript 引擎,并将其重建为可在服务器上使用。

  2) 什么是i/o?
  i/o ( input,output)  就是服务器的一个读写操作比方说声音输入,听歌,网上传递的字符串

  3) 什么是并发?
  一段时间内有多个程序在运行到运行完毕之间

  4) 什么是进程?
  一个软件运行过程中至少要有一个进程对应

  5) 什么是线程?

  线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
  多线程与单线程的效率问题:线程本身由于创建和切换的开销,采用多线程不会提高程序的执行速度,反而会降低速度,但是对于频繁IO操作的程序,多线程可以有效的并发.

  6) 同步和异步有什么区别?  

  同步会阻塞: 循环 script加载src
  异步不会阻塞代码:   定时器,link加载css,img加载src.

  7) 什么是异步的IO.  

  要有数据的交互 异步的IO 读文件
  没有数据的交互 异步的非IO setTimeout setInterval

2.node的解析:
   对象分为两类:
    1) 宿主对象:比如 window history
    2) 内置对象:比如math date regexp array string 
  因为是直接用v8引擎去解析,宿主对象不能解析,没有window对象,此时在node.js中用global表示全局变量,等同于var a.
 
3.常用方法:
  1) 断言
var flag = 123;    //假定条件
// 此处省略一万行

// 不能确定flag的值是否还为123,断言判断
console.assert(flag == 1234,‘flag的值根本不等于123‘);
  2) 计算时间
console.time(‘test‘);
for(var i = 0;i < 100000000;i++){
}
console.timeEnd(‘test‘);

  3) 路径

console.log(__dirname);   //当前文件所在的路径
console.log(__filename);   //当前文件的全部路径

 

4.node.js中的内置模块

  在node中,有一些内置的模块(包),通过require函数引入 

  内置模块:

  1. fs 文件系统
  2. http 创建服务
  3. path 路径
  4. querystring 参数模块
  5. url 地址栏
  6. 自定义模块
  fs 文件系统的模块:
  1)
读取文件
// fs 文件系统的模块
var fs = require("fs");  
// console.log(fs);

// 异步读取文件
fs.readFile(‘./08.txt‘,‘utf8‘,function(err,data){   //如果编码格式不写,输出的就是一串buffer码
    // console.log(err);   //这是错误,但是没有抛出
    if(err){
        throw err;   //把错误抛出来,有错误可以阻止代码继续往后面走
    }
    console.log(data)

})

// 同步
// var data = fs.readFileSync("./08.txt",‘utf8‘)   //同步读完就是函数的返回值
// console.log(data);

 

  2)判断文件是否存在

 //判断文件是否存在
fs.access(‘./08.txt‘,function(err){  
    if(err){
        throw err;
    }
    // 如果没有抛出错误,文件存在
    fs.readFile(‘./08.txt‘,‘utf8‘,function(err,data){
        if(err) throw err;

        console.log(data);
    })
})


fs.access("./abc",function(err){    //可以判断文件夹
    if(err){
        throw err;
    }
    console.log(‘hello‘)
})

   

  3)写文件

异步写文件
var obj = {
    "uname" : "admin",
    "upassword" : "admin" 
}
var arr = [];
// su shu 
arr.push(obj);
var obj2 = {
    "uname" : "admin2",
    "upassword" : "admin2" 
}
arr.push(obj2)

var str = JSON.stringify(arr);
fs.writeFile(‘./data/03.json‘,str,‘utf8‘,function(err){   //如果写入成功,这个err为null
    // console.log(err);
    if(err){
        throw err;    //如果错误,将错误抛出
    }
    console.log(‘文件写入成功‘)


    // 如果文件不存在,会帮你去创建对应的文件,但是不会创建文件夹
})

同步写文件
fs.writeFileSync(file, data[, options])

 

  4)追加文件


异步的追加文件
fs.appendFile(path, data[, options], callback)
fs.appendFile("./data/04.json","hello world","utf8",function(err){
    console.log(err);
    console.log(‘OK‘)
})

同步的追加文件
fs.appendFileSync(path, data[, options])

 

  5)创建文件夹

异步的创建文件夹
fs.mkdir("./data02",function(err){
    console.log(err);   //node会报错,但是错误都不会抛出,不会影响后续代码的执行
    console.log(‘OK‘);
})

同步的创建文件夹
fs.mkdirSync(path[, options])

 

  7)读文件夹

异步读文件夹
fs.readdir(path[, options], callback)
fs.readdir("./data",function(err,data){
    console.log(err);
    console.log(data);   //里面的文件以数组的形式表示出来,进行判断,判断是否是文件夹
    // 如果是文件夹,继续读文件夹,如果是文件,直接读文件,然后展示
})

同步的读文件夹
fs.readdirSync(path[, options])

 

  8)文件夹是否存在

异步判断文件或者文件夹是否存在
fs.access(path[, mode], callback)   能否判断文件夹是否存在
fs.access("./data",function(err){   //这个方法是可以判断文件和文件夹是否存在
    console.log(err);
    console.log(‘OK‘);
})

同步判断文件或者文件夹是否存在
fs.accessSync(path[, mode])

 

  9)

fs.stat("./data",function(err,stats){
    console.log(err);
    // console.log(stats.isDirectory());
  
//    获取文件的大小;
 if(stats.isDirectory()){
  console.log(
‘是文件夹‘)
 }
else{
  console.log(
‘是文件‘)
 }
    console.log(stats.size);
//    获取文件最后一次访问的时间;
    console.log(stats.atime.toLocaleString());
//    文件创建的时间;
    console.log(stats.birthtime.toLocaleString());
//    文件最后一次修改时间;
    console.log(stats.mtime.toLocaleString());
//    状态发生变化的时间;
    console.log(stats.ctime.toLocaleString())
//判断是否是目录;是返回true;不是返回false;
    console.log(stats.isFile())

    console.log(stats.isDirectory()) })
 

})

 

  http的模块:

 

// 引入http的模块
var http = require("http");

// 创建一个服务
var count = 0;
http.createServer(function(request,response){
    count ++;
    console.log(‘hello world‘);
    response.end(count.toString())
}).listen(3000)

 

 
 
 
 
 
 
 
 
 
 

以上是关于node.js的主要内容,如果未能解决你的问题,请参考以下文章

vscode代码片段建议bug

从Node.js Stream写入多个文件

Node.js与HTTP响应主体的unicode问题

节点 JS 不提供静态图像

你可能不知道的JavaScript代码片段和技巧(下)

你可能不知道的JavaScript代码片段和技巧(上)