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 引擎,并将其重建为可在服务器上使用。
3) 什么是并发?
一段时间内有多个程序在运行到运行完毕之间
4) 什么是进程?
一个软件运行过程中至少要有一个进程对应
5) 什么是线程?
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
多线程与单线程的效率问题:线程本身由于创建和切换的开销,采用多线程不会提高程序的执行速度,反而会降低速度,但是对于频繁IO操作的程序,多线程可以有效的并发.
6) 同步和异步有什么区别?
同步会阻塞: 循环 script加载src
异步不会阻塞代码: 定时器,link加载css,img加载src.
7) 什么是异步的IO.
要有数据的交互 异步的IO 读文件
没有数据的交互 异步的非IO setTimeout setInterval
var flag = 123; //假定条件 // 此处省略一万行 // 不能确定flag的值是否还为123,断言判断 console.assert(flag == 1234,‘flag的值根本不等于123‘);
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函数引入
内置模块:
- fs 文件系统
- http 创建服务
- path 路径
- querystring 参数模块
- url 地址栏
- 自定义模块
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的主要内容,如果未能解决你的问题,请参考以下文章