1.nodejs中fs文件系统模块学习
主要了解node对文件的操作,我们可以大概总结针对文件系统的大致操作有什么?
1.文件打开
2.文件关闭
3.文件读取
4.文件写入
5.删除文件
6.移动文件
7复制文件
7.创建目录
8.删除目录
......
等等吧!肯定还好很多,我们知道node是异步非阻塞处理,这些操作除了我们概念中同步方式肯定还会有异步方式,也就是同一个处理会有2个方法共选择。
fs模块手册地址:http://nodejs.cn/doc/nodejs/fs.html 里面介绍了所有处理,我们在项目下做测试操作。
很多都是对文件的操作,而我们的项目是web形式,除了读取可以把读取的数据显示出来,其他的结果情况我们需要到目录去查看。
==我们加入路由,get的“/fs”处理,我们的引擎页面fs.html,我们把fs的处理放在路由下,只要访问地址,就会执行我们的fs操作,对应查看就行了。
fs.html
<!DOCTYPE html> <html> <head> <title>fs</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1>fs</h1> </body> </html>
路由index.js加入:
app.get('/fs', function(req, res){ res.render('fs'); });
访问时,里面要写入fs的操作,我们运行,地址转到“http://localhost:1234/fs”,会看到“fs”。
我么先在app.js同级创建文件夹“fs”,里面放入1.txt,2.txt,3.txt,1为空,2、3随便写一些数据,提供文件处理操作。
1..路由修改:
app.get('/fs', function(req, res){ res.render('fs'); fs.appendFile('./fs/1.txt', 'data to append', 'utf8', function(){}); });
往1.txt写数据,编码utf8,我们重启运行,然后查看1.txt内容:
结论:fs.appendFile(file, data[, options], callback),参数1要写入那个文件,2写入数据内容,可指定编码,默认utf-8,3回调处理。
我们要根据测试目录修改file位置,我们是方法fs目录下。
同步不演示了,和异步同理。
2.路由修改
fs.chmod(path, mode, callback) 文件权限修改,
3.路由修改
app.get('/fs', function(req, res){ fs.exists("./fs", function(exists){ res.render('fs', { res:exists }); }); });
判断路径是否存在,我们把结果输出到页面,fs.html:
<!DOCTYPE html> <html> <head> <title>fs</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1>fs</h1> <h1><%= res %></h1> </body> </html>
重启,运行,
改成不存在的路径,测试会输出false。
app.get('/fs', function(req, res){ fs.exists("./ff", function(exists){ res.render('fs', { res:exists }); }); });
fs.exists(path, callback) 路径是否存在判断,回调会返回true或者false
4.路由修改
app.get('/fs', function(req, res){ fs.mkdir("./fs/me", function(){ res.render('fs', { res:exists }); }) });
测试,结果创建目录
fs.mkdir(path[, mode], callback) 会判断创建目录是否存在,我们是在fs下创建me目录
5.路由修改
app.get('/fs', function(req, res){ fs.readFile('./fs/2.txt', 'utf8', function(err, data){ if (err) throw err; res.render('fs', { res:data }); }); });
我们测试,运行
中文乱码,好吧,觉得中文会出问题,我们把2.txt打开,改为utf-8保存,测试运行:
会发现,中文正常显示了。
fs.readFile(file[, options], callback) 回调会返回读取的结果。
6.路由修改
app.get('/fs', function(req, res){ fs.rename("./fs/1.txt", "./fs/me/11.txt", function(){}) });
移动方法可以修改名称,测试运行。
所在目录和名称都被修改了,这个是异步处理,同步的一样。
fs.rename(oldPath, newPath, callback) 参数1指定要移动文件路径,2执行移动到的位置和新名字。
7.路由修改
app.get('/fs', function(req, res){ fs.rmdir("./fs/te", function(){}) });
我们在fs下创建te文件夹
运行后发现被删除,当我们要删除me目录,发现是不可行的,因为me下存在文件,说明删除目录只能删除空目录。
fs.rmdir(path, callback) 删除目录方法,不过只能删除空目录。
8.路由修改
app.get('/fs', function(req, res){ fs.unlink("./fs/2.txt", function(){}) });
运行,我们会发现2.txt被删除,文件删除方法。
fs.unlink(path, callback) 参数1,删除文件路径。
9.路由修改
app.get('/fs', function(req, res){ fs.writeFile('./fs/me/1.txt', 'read me','utf8', function (err) { if (err) throw err; }); });
写入内容,不存在会新建文件,并且写入,
我们运行,会发现me下创建了1.txt并且写入了内容,
fs.writeFile(file, data[, options], callback)
除了这些还有很多操作,可以百度文件打开结合读取或者写入的处理。不过我们常用的就是:
1.移动文件(上传表单)
2.删除文件(删除信息删除图片)
3.文件和目录是否存在(防止错误发生)
4.创建目录(针对每个用户创建单一目录保存内容)2.nodejs中crypto加密模块学习
2.nodejs中crypto加密模块学习
crypto模块作为加密模块,针对web开发,主要就是密码的加密处理。
crypto手册地址:http://nodejs.cn/doc/nodejs/crypto.html
index.js路由文件先引入crypto,与引入fs模块同理
var crypto = require('crypto');
路由加入:
app.get('/crypto', function(req, res){ res.render('crypto', { res:"crypto" }); });
crypto.html:
<!DOCTYPE html> <html> <head> <title>crypto</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= res %></h1> </body> </html>
地址:http://localhost:1234/crypto 会看见crypto几个大字。
我们引用加密和使用md5加密:
app.get('/crypto', function(req, res){ var pass="admin"; var md5 = crypto.createHash('md5'); var mpass=md5.update(pass).digest('hex'); var rmpass=mpass.substring(2); res.render('crypto', { res:pass,resm:mpass,resrm:rmpass }); });
crypto.html,显示三种结果:
<!DOCTYPE html> <html> <head> <title>crypto</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= res %></h1> <h1><%= resm %></h1> <h1><%= resrm %></h1> </body> </html>
我们运行查看结果:
1是为加密内容
2是加密的内容
3是加密后进行裁剪的内容
我们在加密后在做裁剪是不固定操作的,我们从第3位开始,同样也可以从其他位置,更难猜出密码。
3.nodejs中全局对象的学习
手册地址:http://nodejs.cn/doc/nodejs/globals.html
我们加入路由
app.get('/globals', function(req, res){ res.render('crypto', { res:"globals" }); });
globals.html:
<!DOCTYPE html> <html> <head> <title>globals</title> <link rel='stylesheet' href='/stylesheets/style.css' /> </head> <body> <h1><%= res %></h1> </body> </html>
运行:http://localhost:1234/globals,看见globals几个大字。
我们输出几个全局对象内容,看看结果,修改路由文件:
app.get('/globals', function(req, res){ res.render('globals', { res:__dirname+":"+__filename }); });
结果:
index.js所在的目录和目录+名称。