node学习教程及笔记

98 阅读6分钟

Node.js 简介

什么是 Node.js Node.js 是一个基于 Chrome V8 引擎的JavaScript 运行环境

Node.js 中的 JavaScript 运行环境

V8引擎

内置API

fs path http js 内置对象 querystring etc… 注意:

浏览器是 JavaScript 的前端运行环境。

Node.js是 JavaScript 的后端运行环境。

Node.js 中无法调用DOM 和 BOM 等浏览器内置 API。

Node.js 可以做什么

基于 Express 框架 (),可以快速构建 Web 应用

基于 Electron 框架 (),可以构建跨平台的桌面应用

基于 restify 框架 (),可以快速构建 API 接口项目

读写和操作数据库,创建实用的命令行工具辅助前端开发、etc…

总之:Node.js 是大前端时代的"大宝剑",有了 Node.js 这个超级 buff 的加持,前端程序员的行业竞争力会越来越强!

Node.js 好学吗? Node.js 怎么学?

会 JavaScript,就能学会 Node.js!!!

Node.js 的学习路径:

JavaScript 基础语法 +Node.js 内置 API 模块(fs、path、http 等) +第三方 API 模块(express、mysql 等)

1.通过node执行js

1.复制文件所在路径
2.node +路径

2.node 读写文件

1.引入file模块
读取文件
2.fs.readFile(‘./read/hell.txt’,function(error,data){
if(error){
console.log(“读取文件失败”);
}
else{
console.log(data.toString());
}

})
使用 fs 核心模块的readFile对文件数据进行读取,再跟上一个大括号放入所需的参数

写文件

fs.writeFile(‘./files/2.txt’, ‘Node.js’, function (err) {  
[//1.如果文件写入成功](https://1.xn--5nq22dpe93b05uslnk1f2re/),则err的值等于null  
[//2.如果文件写入失败](https://2.xn--5nq22dpe321aqlar90dukdrs3h/),则err的值等于一个错误对象  
console.log(err);  
**//判断文件是否写入成功**  
if (err) {  
return console.log(‘文件写入失败!’+err.message);  
}  
console.log(‘文件写入成功!’);  
}) 

使用 fs 核心模块的writeFile对文件数据进行写入,再跟上一个大括号放入所需的参数

第一个参数就是要写入的文件路径,./ 表示路径在当前目录m,…/ 则是进入上一层目录查找,

在这里我使用的是当前目录./

第二个参数就是要写入的数据,注意使用引号

第三个参数是一个回调函数 来展示我们的数据是否写入成功

3.fs模块路径拼接

相对路径读取可能会出错,可以用绝对路径

__dirname 表示当前文件所处的目录
console.log(__dirname);

fs.readFile(__dirname + '/files/1.txt', function(err, dataStr) {  
if (err) {  
return console.log('读取文件失败!', +err.message);  
}  
console.log('读取文件成功!' + dataStr);  
})

4文件路径path模块

1.合并路径

path.join([...paths])
2.从路径字符串解析出文件名
path.basename(path, [ext])

参数一:必选参数,表示一个路径字符串
参数二:可选参数,表示文件扩展名
不加参数二,返回完整文件名,如test.html
加参数二,只返回文件名,如test
3.获取路径中的扩展名部分
path.extname(path)

参数:路径字符串
返回一个扩展名字符串

案例:拆分html文件

const fs = require('fs')  
const path = require('path')

// \s表示空白字符,\S表示非空白字符,*表示匹配前面的任意次  
const regExpStyle = /','')  
fs.writeFile(path.join(__dirname,'./index.css'),str,(err)=>{  
if(err) return console.log('创建JS文件失败:',err.message)  
console.log('CSS文件创建成功!')  
})  
}  
resolveJS = (str)=>{  
str = str.match(regExpScript)[0]  
str = str.replace('','')  
fs.writeFile(path.join(__dirname,'./index.js'),str,(err)=>{  
if(err) return console.log('创建JS文件失败:',err.message)  
console.log('JS文件创建成功!')  
})  
}  
resolveHTML = (dataStr) => {  
let styleLink = "",  
scriptLink = ""  
dataStr = dataStr.replace(regExpStyle,styleLink).replace(regExpScript,scriptLink)  
fs.writeFile(path.join(__dirname,'./newIndex.html'),dataStr,(err)=>{  
if(err) return console.log('创建新的HTML文件失败:',err.message)  
console.log('HTML文件创建成功!')  
})  
}  

5.http模块*

*Node中的Http
Node中提供了http模块,其中封装了高效的http服务器和http客户端
http.Server是一个基于事件的http服务器,内部是由c++实现的,接口是由JavaScript封装
http.request是一个http客户端工具。 用户向服务器发送数据。创建简单服务器

const http = require('http');  
function a(){  
console.log("dajiahao");  
}  
var server = new http.Server();  
server.on('request',(req,res)=>{  
console.log(req.url);  
//设置应答头信息  
res.writeHead(200,{'Content-Type':'text/html'});  
res.write('hello we are family  
');  
res.end('server already end\n');  
});  
//显示了三次这也证明了TCP的三次握手  
server.on('connection',()=>{  
a();  
});  
server.on('close',()=>{  
console.log('server will close');  
});  
//关闭服务为了触发close事件  
server.close();  
server.listen(80);

req对象属性

res 方法
res.setHeader("Content-Type", "text/html;charset=utf-8");response.write(data,[encoding]) 向请求客户端发送相应内容,data是buffer或字符串,encoding为编码response.end([data],[encoding]) 结束响应,告知用户所有发送已经完成,当所有要返回的内容发送完毕,该函数必须被调用一次,如果不调用,客户端永远处于等待状态res.end(content);在本地web服务器里打开html文件

 var http = require('http');  
var fs = require('fs');//引入文件读取模块var documentRoot = 'E:/PhpProject/html5/websocket/www';  
//需要访问的文件的存放目录var server= http.createServer(function(req,res){```
 var url = req.url;
 //客户端输入的url,例如如果输入localhost:8888/index.html
 //那么这里的url == /index.html 

 var file = documentRoot + url;
 console.log(url);
 //E:/PhpProject/html5/websocket/www/index.html 

 fs.readFile( file , function(err,data){
 /*
     一参为文件路径
     二参为回调函数
         回调函数的一参为读取错误返回的信息,返回空就没有错误
         二参为读取成功返回的文本内容
 */
     if(err){
         res.writeHeader(404,{
             'content-type' : 'text/html;charset="utf-8"'
         });
         res.write('<h1>404错误</h1><p>你要找的页面不存在</p>');
         res.end();
     }else{
         res.writeHeader(200,{
             'content-type' : 'text/html;charset="utf-8"'
         });
         res.write(data);//将index.html显示在客户端
         res.end();

     }

 });
}).listen(8888);console.log('服务器开启成功');

Express web服务 提供了简洁的路由定义方式
对获取http请求参数进行简化处理
对模板引擎支持程度高,方便渲染动态HTML页面
拥有中间件机制有效控制http请求
拥有大量第三方中间件功能进行扩展6node模块化Common.js
由于 module.exports 单词写起来比较复杂,为了简化向外共享成员的代码,Node 提供了 exports 对象。 默认情况 下 , exports 和 module.exports 指向同一个对象 。最终共享的结果,还是以 module.exports 指向的对象为准

Node.js 中的模块化规范
① 每个模块内部,module 变量代表当前模块。
② module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口。
③ 加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块。npm 包管理工具使用 npm 包管理工具下载的包,共分为两大类,分别是:项目包 全局包1. 项目包
那些被安装到 项目 的 node_modules 目录 中的包,都是项目包。
项目包又分为两类,分别是:
开发依赖包(被记录到 devDependencies 节点中的包,只在开发期间会用到)
核心依赖包(被记录到 dependencies 节点中的包,在开发期间和项目上线之后都会用到)

  1. 全局在执行 npm install 命令时,如果提供了 -g 参数,则会把包安装为 全局包 。
    全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录下。express 框架简述
    Express 的作用和Node.js 内置的 http模块类似,是专门用来创建Web服务器的。Express的本质:就是一个npm 上的第三方包,提供了快速创建Web服务器的便捷方法。*