如果文件存在则在Nodejs中移动文件,否则创建文件

时间:2016-08-30 15:58:13

标签: node.js fs es6-promise

我正在尝试将文件从abc位置移动到位置xyz,如果该位置xyz中已存在该文件,请将其删除,然后保存新文件。

这是我的代码

const promises = {
  deleteFile: path => {
    return new Promise((resolve, reject) => {
      const fs = require('fs');

      fs.stat(path, (err, stat) => {
        if (err === null) {

          fs.unlink(path, err => {
            if (err) { return reject(err) }
            resolve();
          })
        } else if(err.code == 'ENOENT') {
          console.log('File does not exist');
          resolve();
        } else {
          reject(err);
        }
      });
    });
  },
  copyFile: (from, to) => {
    return new Promise((resolve, reject)=> {
      copyFile(from, to, (err) => {
        if (err) { return reject(err); }
        console.log(`Finished writing file ${to}`);
        resolve();
      })
    })
  }
}

const copyFile = (from, to, overallCb) => {
    const fs = require('fs');
    const rs = fs.createReadStream(from)
    const ws = fs.createWriteStream(to)

    let cbCalled = false;
    function done (err) {
      overallCb(err);
      cbCalled = true;
    }

    rs.on('error', (err) => {
      done(err);
    })

    ws.on('error', (err) => {
      done(err);
    })
    rs.pipe(ws);
  }
;

const OUTPUT_PATH   = `./js/libs/`
  , _NODE_MODULES   = './node_modules/'
  , filePath = `${_NODE_MODULES}somePathToAFile`
  ;

promises.deleteFile(`${OUTPUT_PATH}someFile.min.js`)
  .then(promises.copyFile(filePath, `${OUTPUT_PATH}someFile.min.js`))
  .then(words => {
    console.log('**** done doing things ****');
  })
  .catch(error => { console.log(`ERROR`, error); })

如果文件存在,它只是删除文件而不执行任何其他操作。

如果文件不存在,一切正常。

关于我做错什么的任何想法?

1 个答案:

答案 0 :(得分:0)

我的代码中有一些承诺错误......对于将来我来说,这是上面代码的工作版本

'use strict';

const promises = {
  deleteFile: path => {
    return new Promise((resolve, reject) => {
      const fs = require('fs');

      fs.stat(path, (err, stat) => {
        if (err === null) {

          fs.unlink(path, err => {
            if (err) { return reject(err) }
            resolve(`Removing document at ${path}`);
          })
        } else if(err.code === 'ENOENT') {
          resolve('File does not exist');
        } else {
          reject(err);
        }
      });
    });
  },
  copyFile: (from, to) => {
    return new Promise((resolve, reject) => {
      copyFile(from, to, (err) => {
        if (err) { return reject(err); }
        resolve(`Finished writing file ${to}`);
      })
    })
  }
}

const copyFile = (from, to, overallCb) => {
    const fs = require('fs');
    const rs = fs.createReadStream(from)
    const ws = fs.createWriteStream(to)

    let cbCalled = false;
    function done (err) {
      overallCb(err);
      cbCalled = true;
    }

    rs.on('error', done)
    ws.on('error', done)
      .on('close', done)

    rs.pipe(ws);
  }
;

const OUTPUT_PATH   = './js/libs/'
  , _NODE_MODULES   = './node_modules/'
  , filePath        = `${_NODE_MODULES}somePathToAFile`
  ;


promises.deleteFile(`${OUTPUT_PATH}someFile.min.js`)
 .then(msg => {
   console.log(msg)
   return promises.copyFile(filePath, `${OUTPUT_PATH}someFile.js`)
 })
 .then(msg => {
   console.log(msg)
 })
 .catch(err => { // Do errory things}