2016-08-30 6 views
2

Ich versuche eine Datei von einem Speicherort abc an Speicherort xyz zu verschieben, wenn die Datei bereits in Speicherort xyz existiert, löschen Sie sie und speichern Sie dann die neue Datei.Datei in Nodejs verschieben, wenn Datei existiert, sonst Datei erstellen

Hier ist mein Code

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); }) 

Wenn die Datei existiert nur einfach die Datei löscht und tut nichts anderes.

Wenn die Datei NICHT existiert, funktioniert alles gut.

Irgendeine Idee, was ich falsch mache?

Antwort

0

hatte ich einige Versprechen Fehler in meinem Code ... Für mich hier künftig die Arbeit ist Version des obigen Code

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