【node】path和fs常用方法和案例

一、准备知识

var path = require("path");

var fs = require("fs");

(1)path

__dirname   //指的是当前文件夹

path.resolve(__dirname, '..’)  //父一级路径

(2)fs

var files = fs.readdirSync(path);   //读取路径下的所有文件

fs.unlink(path, (err) => {});   //删除某个文件

fs.mkdir(path,(err) => {});//添加文件

fs.rename(oldpath,newpath,function (err) {});   //重命名文件

二、案例

(1)一个例子,维护脚本,删除多余的文件

var path = require("path");

var fs = require("fs");

var qcfv = require("qcfv");//自己写的表单验证

//删除/public/img里边的不达标文件

exports.clearPhotos = function(){

    var path = __dirname + "/public/img";

    //读取路径下所有的文件,这里要用到fs

    var files = fs.readdirSync(path);

    files.forEach(item =>{

        if(!qcfv.isPicture(item)){

            //拼接出对应文件的完整路径

            var singlePath = path+"/"+item;

            fs.unlink(singlePath, (err) => {

                if (err) throw err;

                console.log('文件已删除');

            });

        }

    });

}

(2)添加文件,这里是上传图片

var moment = require("moment");

var formidable = require('formidable');

var path = require("path");

var fs = require("fs");

var qcfv = require("qcfv");

……..

var form = new formidable.IncomingForm();

//__dirname指的是当前文件夹,我们找到父一级

form.uploadDir = path.resolve(__dirname, '..')+'/public/img/';

form.parse(req, function(err, fields, files) {

//生成时间文件挂载在files,提交内容挂载在fields上

    var oldpath = files.goodsimage.path;

    lpost = fields.post;

    gtitle = fields.gtitle;

    //生成时间

    var time = moment(new Date).format('YYYYMMDDHHmmss');

    //生成随机数

    var rand = parseInt(Math.random() * 8999 +10000);

    //拿到拓展名

    var extname = path.extname(files.goodsimage.name);

    //新的地址    

    var newpath = path.resolve(__dirname, '..') + '/public/img/'+time+rand+extname;

    //然后给旧地址的文件改名

    var iserror = false;

    fs.rename(oldpath,newpath,function (err) {

        //改名失败,删除文件的时候爆对应文件名,文件不存在

        if(err){

            fs.unlink(oldpath, (err) => {

                if (err) throw err;

                console.log('文件已删除');

            });

            return res.redirect('/u/' + currentUser.name);

        }else{

            //将路径字符串按照path分隔符拆开,然后拿到最后一个,图片的名字和后缀

            goodsimage = newpath.split(path.sep).pop();

            var istitle = qcfv.isEmptyStr(gtitle);

            var iscontent = qcfv.isEmptyStr(lpost);

            //先判断表单内容全不全,不全删除图片,不做存储

            if(istitle || iscontent || !qcfv.isPicture(goodsimage)){

                if(istitle){req.flash("error","请输入商品名称");}

                if(iscontent){req.flash("error","请输入商品描述");}

                if(!qcfv.isPicture(goodsimage)){req.flash("error","请选择图片”);}

                //将生成的文件删除

                fs.unlink(newpath, (err) => {

                    if (err) throw err;

                    console.log('文件已删除');

                });

                return res.redirect('/u/' + currentUser.name);

            }

            

            var post = new Post(currentUser.name,lpost,null,gtitle,goodsimage);

            post.save(function(err){    

                //如果有问题,就重定向到首页

                if(err){

                    req.flash('error',err);

                    return res.redirect('/');

                }

                //不然就是发表成功,我们定向到用户页

                req.flash('success','发表成功');

                //调用user的路由,在那里我们能通过get方法获取数据,做render传值操作

                res.redirect('/u/' + currentUser.name);

            });

        }

    });

});

发布了283 篇原创文章 · 获赞 21 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/dangbai01_/article/details/102532046