Nodejs初识

1.Nodejs是什么?

  • nodejs是基于谷歌开发的v8引擎和;ibuv库(底层库)封装的一个js的运行平台。
  • node:v8引擎+libuv库 == js的运行环境/运行平台。
  • nodejs的特点:事件驱动,异步编程,无阻塞异步I/O
    事件驱动:JavaScript是基于对象的语言。这与Java不同,Java是面向对象的语言。而基于对象的基本特征,就是采用事件驱动。它是在用形界面的环境下,使得一切输入变化简单化。通常鼠标或热键的动作我们称之为事件,而由鼠标或热键引发的一连串程序的动作,称之为事件驱动。而对事件进行处理程序或函数,我们称之为事件处理程序。
    异步编程:让程序多线程进行运行,使程序不会发生阻塞。所谓异步执行,不同于同步执行(程序的执行顺序与任务的排列顺序是一致的、同步的),每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的。
    无阻塞异步I/O:异步I/O操作(asynchronous I/O operation): 不导致请求进程阻塞。非阻塞操作的进程不能进行设备操作的时候,并不挂起,它或则放弃,或者不停的查询,直到可以进行操作为止。
  • 缺点:大量的匿名函数 , $(‘btn’).click(function(){})
  • 应用范围:高并发业务,IO密集型业务,桌面应用。

2.npm

  • npm是世界上最大的=开源代码的生态系统。
  • 使用场景:
    1.允许用户从NPM服务器下载别人编写的第三方包到本地 如:sliy-date-time ;
    2.允许用户从NPM服务器下载并安装别人编写的命令行程序(工具)到 如:supervisor ;
    3.允许用户将自己编写的包或命令行程序(工具)上传到NPM服务器供别人使用。
  • 一些常用的命令:
    1.npm -v 查看所安装npm的版本
    2.npm -help 查看npm命令帮助 后边也可以直接跟某个命令 查看帮助文档
    3.npm install 模块名@版本号 安装模块
    4.npm uninstall 模块名 卸载模块
    5.npm list 查看当前目录下已经安装的node包
    6.npm info 模块名 查看模块的当前版本
  • package.json:
    1.作用:定义了这个项目所需要的各种模块,以及项目的配置信息(名称,版本,许可证等源数据)
    2.创建package.json: npm init ,npm init -yes
    3.安装模块并把模块写入package.josn(依赖)
    npm install 模块名 --save 自动更新dependencies(配置当前程序所依赖的其他包)字段值
    npm install 模块名 --save-dev 自动更新devDependencies(配置当前程序所依赖的其他包,只会下载模块,而不下载这些模块的测试节文档框架)字段值

3.淘宝镜像

  • npm包官网 http://www.npmjs.org
  • 淘宝npm镜像官网 http://npm.taobao.org/
  • 淘宝镜像地址:npm(zip 压缩支持)命令行工具代替默认的npm
    npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 说明
    淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10 分钟 一次以保证尽量与官方服务同步。

4.Nodejs自启动工具supervisor

cnpm install -g supervisor
使用 supervisor 代替 node 命令启动应用

5.核心模块(内置模块)

- fs模块:引入模块,文件操作,文件夹操作
1.引入模块 let 方式=require(“fs”);
2.文件操作
readFile 读取文件
fs.readFile(path[, options], callback)
参数 path:路径 , options:编码格式 utf-8 ,
callback:回调(err:失败的原因 data:读取到的数据)

**writeFile 覆盖式 写入**
fs.writeFile(path, data[, options], callback)
	参数
		path:路径
		data:写入的数据
		options:编码格式  utf-8
		callback:回调
		err:失败的原因
		
**appendFile 追加式 写入**
fs.appendFile(path, data[, options], callback)
	参数
		path:路径
		data:写入的数据
		options:编码格式
		callback:回调
		err:失败的原因

unlink 删除文件
fs.unlink(path, callback)
参数
path:路径
callback:回调
err:失败的原因
fs.rename 重命名

流操作
var rs=fs.createReadStream(path) 读取流
参数
path:路径
事件
读取:rs.on(‘data’,callback)
callback:回调
chuck:读取到的数据
读取完成:rs.on(‘end’,callback)
callback:回调
读取失败:rs.on(‘error’,callback)
callback:回调
err:失败的原因

fs.createWriteStream(path) 写入流

	参数
		path:路径
	事件
		打开:ws.on('open',callback)
			callback:回调
		失败:ws.on('error',callback)
			callback:回调
				err:失败的原因
		完成:ws.on('finish',callback)
			callback:回调
	方法
		写入:rs.write(data)
		关闭:ws.end()

文件夹操作
fs.stat 检测是文件还是目录
isFile()
文件
isDirectory()
文件夹
mkdir 创建文件夹
fs.mkdir(path, callback)
callback:回调
err:失败的原因
rmdir 删除文件夹
fs.rmdir(path, callback)
callback:回调
err:失败的原因
readdir 读取文件夹
fs.rmdir(path, callback)
callback:回调
err:失败的原因
files:读取到的目录 是一个数组

  • http模块
const http = require("http");
let app = http.createServer((req, res) => {
    res.writeHead(200, { "content-type": "text/html;charset=utf-8" })
    res.write("hello http模块 "); //向前台响应数据
    res.end() //响应结束
})
app.listen(3000, () => {
    console.log("3000已启动")
})
  • url 模块
const url = require("url");

console.log(url);
//  http://localhost:3000/?username=root&password=24345 
console.log(url.parse(" http://localhost:3000/?username=root&password=24345"), true);
let obj = url.parse(" http://localhost:3000/?username=root&password=24345", true);
// parse("路径",true会将query变成对象)
console.log(obj.query);
const urlLib = require("url");
console.log(urlLib);
let obj = {
    protocol: 'http:',
    slashes: true,
    auth: null,
    host: 'localhost:3000',
    port: '3000',
    hostname: 'localhost',
    hash: null,
    search: '?username=root&password=24345',
    query: 'username=root&password=24345',
    pathname: '/',
    path: '/?username=root&password=24345',
    href: 'http://localhost:3000/?username=root&password=24345'
}
console.log(urlLib.format(obj)) //http://localhost:3000/?username=root&password=24345
    // format和parse相反

// resolve这个方法返回一个格式为"from/to"的字符串,是对传入的两个参数用"/"符号进行拼接,并返回
console.log(urlLib.resolve("http://localhost:3000/", "login")); //http://localhost:3000/login
  • querystring模块
const querystring = require("querystring");
console.log(querystring);

console.log(querystring.parse("username=root&password=24345"));
//[Object: null prototype] { username: 'root', password: '24345' }
console.log(querystring.stringify({ username: 'root', password: '24345' }));
// username=root&password=24345
console.log(querystring.stringify({ username: 'root', password: '24345' }, "*"));
// username=root*password=24345
console.log(querystring.stringify({ username: 'root', password: '24345' }, "*", "$"));
// username$root*password$24345
console.log(querystring.stringify({ username: 'root', password: '24345', sex: "male" }, "*", "$"));
//username$root*password$24345*sex$male

//escape("str")传入一个字符串进行编码
console.log(querystring.escape("name=张三")) //name%3D%E5%BC%A0%E4%B8%89
console.log(querystring.escape("name=zhangsan")) //name%3Dzhangsan

// 解码 unescape("str")传入一个字符串进行解码
console.log(querystring.unescape("name%3D%E5%BC%A0%E4%B8%89")) //name=张三
  • path模块
//引入
const path = require("path");
// C:\Users\Administrator\Desktop\火花\node.js复习\day02\b.txt
// console.log(path)
console.log(path.basename("C:\\Users\\Administrator\\Desktop\\火花\\node.js复习\\day02\\b.txt")); //文件+后缀名 b.txt


console.log(path.dirname("C:\\Users\\Administrator\\Desktop\\火花\\node.js复习\\day02\\b.txt"));
//当前文件所在的目录地址 C:\Users\Administrator\Desktop\火花\node.js复习\day02


console.log(path.extname("C:\\Users\\Administrator\\Desktop\\火花\\node.js复习\\day02\\b.txt"));
// 扩展名.txt
console.log(path.parse("C:\\Users\\Administrator\\Desktop\\火花\\node.js复习\\day02\\b.txt"));
// {
//     root: 'C:\\',
//     dir: 'C:\\Users\\Administrator\\Desktop\\火花\\node.js复习\\day02',
//     base: 'b.txt',
//     ext: '.txt',
//     name: 'b'
//   }

// join 
console.log(path.join("action", "login")); //action\login
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值