node.js简介
node.js是一个基于Chrome v8引擎的javascript 运行环境。Node.js使用了一个事件驱动、非阻塞式 I/O的模型,使其轻量又高效。
nodejs 是 提供运行js的工具 c++语言开发。
npm
npm : node package manager(node包管理器)
npm常用命令:
(1)install
(2)uninstall
(3)update
(4)search
(5)list
注:一般使用之前,都会npm init初始化一下。
使用命令 npm install jquery --save-dev
安装的依赖会在"devDependencies"下,只有开发的时候可以使用,上线之后不能使用
使用命令 npm install jquery
安装的依赖在"dependencies"下
对应uninstall为卸载
npm view jquery versions
查看所有可安装的版本号
再使用如 npm install jquery@1.11.0 安装对应版本的依赖
模块引用
创建三个js文件,main.js moduleA.js moduleB.js
1、在moduleA.js中
function doAdd(a,b){
return a+b;
}
// 向外暴露的变量,放到exports对象里
// 未放到exports对象里的都是私有的变量,即使模块被require加载,也无法使用
module.exports.doAdd = doAdd;
2、在moduleB.js中
function doMulti(a,b){
return a*b;
}
// 直接更改向外暴露的exports对象,为doMulti函数
module.exports = doMulti;
3、在main.js中
let moduleA = require("./moduleA.js");
// 路径问题: ./当前路径 ../表上级目录 /表示根目录
let doMulti = require("./moduleB.js");
console.log(moduleA.doAdd(10,20));
console.log(doMulti(10,20));
// 窗口输入命令 node main.js
// 打印结果为:
// 30
// 200
热更新
每次浏览器发出请求,都需服务器停止再开启
安装 npm install nodemon -g
启动 nodemon ***.js
可以每次浏览器发出请求,无需node,自动更新
NODEJS-API URL
// 引入url模块
const url = require("url");
(1)url.parse(urlString) 查询到url信息,对象格式显示
let str = "http://localhost/stage02/course32/index.html";
console.log(url.parse(str));
(2)url.format(urlString) 将对象格式的地址信息转化为正常的url地址
let obj = {
host:"127.0.0.1",
port:80,
pathname:"/aa"
}
console.log(url.format(obj));
(3)url.resolve(from,to) 将两个url解析成一个完整的url
// 返回从根目录指定到当前目录的绝对路径url,一个标准的url格式
console.log(url.resolve("/one/two/three","four"));
// one/two/four
console.log(url.resolve("http://example.com/","/one"));
// http://example.com/one
console.log(url.resolve("http://example.com/one","/two"));
// http://example.com/two
querystring
用于解析和格式化URL查询字符串
// 引入querystring
const qs = require("querystring");
let str = "a=小明&b=2";
console.log(qs.parse(str));
// 转换为 对象{a:'小明',b:'2'}
let escStr = qs.escape(str);
console.log(escStr);
// 如果有中文,进行编码
console.log(qs.unescape(escStr));
// 解析escape转换的编码,解析成汉字
// a=小明&b=2
let obj = {
name:"admin",
psw:"123"
}
console.log(qs.stringify(obj));
// name=admin&psw:123
// 对象格式转换为字符串
事件 EVENTS(需创建实例)
const Events = require("events");
let evt = new Events();
// 注册事件
evt.on("data",function(a){
console.log(a);
});
evt.emit("data",10);
// 10
evt.emit("data",20);
// 20
FILE SYSTEM(操作文件)
const fs = require("fs");
(1)获取文件的一些信息
fs.stat("index.html",(err,stats)=>{
if(err){
return;
}
console.log(stats); // 输出具体的文件信息
console.log(stats.isFile()); // 输出是否是文件,布尔值
})
(2)创建目录
fs.mkdir("test",err=>{
if(err){
console.log(err,"创建目录失败");
}
})
(3)写文件 追加文件内容
// 写文件
fs.writeFile("test/aa.txt","aa",err=>{
})
// 追加文件内容
fs.appendFile("test/aa.txt","bb",err=>{
if(err){
console.log(err);
}
})
(4)读文件内容
fs.readFile("index.html",(err,con)=>{
if(err){
return;
}
// 直接打印,出现的是Buffer数据
console.log(con);
// 加上toString(),输出的是正常的格式
console.log(con.toString());
})
(5)列出目录里的东西
fs.readdir("test",(err,con)=>{
// [ 'aa.txt' ]
console.log(con);
})
(6) 重命名
fs.rename("test","test1",()=>{
})
(7)删除文件夹,带有子文件
// 列出目录下的文件
fs.readdir("test1",(err,arr)=>{
// 遍历目录下的文件
arr.forEach(item=>{
// 同步删除每个文件
fs.unlinkSync("test1/"+item)
})
// 最后删除文件夹
fs.rmdir("test1",err=>{
console.log(err);
})
})
事件执行顺序
const http = require("http");
let server = http.createServer((req,res)=>{
let resData = "aa";
res.writeHeader(200,{"content-type":"text/html;charset=utf-8"});
req.on("data",function(data){
resData+=data;
console.log(1);
})
req.on("end",function(){
console.log(0);
req.emit("data","bb");
console.log(2);
res.end(resData);
console.log(3);
})
});
server.listen(3000,"localhost");