node 学习笔记
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.如果文件写入成功,则err的值等于null
//2.如果文件写入失败,则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 包管理工具下载的包,共分为两大类,分别是:项目包 全局包
- 项目包
那些被安装到 项目 的 node_modules 目录 中的包,都是项目包。
项目包又分为两类,分别是:
开发依赖包(被记录到 devDependencies 节点中的包,只在开发期间会用到)
核心依赖包(被记录到 dependencies 节点中的包,在开发期间和项目上线之后都会用到) - 全局
在执行 npm install 命令时,如果提供了 -g 参数,则会把包安装为 全局包 。
全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录下。
express 框架简述
Express 的作用和Node.js 内置的 http模块类似,是专门用来创建Web服务器的。Express的本质:就是一个npm 上的第三方包,提供了快速创建Web服务器的便捷方法。