【问题标题】:Move file in Nodejs if file exists otherwise create file如果文件存在,则在 Nodejs 中移动文件,否则创建文件
【发布时间】:2017-01-07 00:23:02
【问题描述】:

我正在尝试将文件从位置 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); })

如果文件存在,它只是简单地删除文件而不做其他任何事情。

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

知道我做错了什么吗?

【问题讨论】:

    标签: node.js fs es6-promise


    【解决方案1】:

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

    '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}
    

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2020-05-29
      相关资源
      最近更新 更多