2013-03-21 8 views
34

Mam proste trasy zdefiniowanej z express.js:Sprawdzenie czy writeFileSync powodzeniem pisał plik

exports.save = function (request, response) 
{ 
    var file = request.body.file; 
    var content = request.body.content; 

    var saved = false; 

    if (fs.existsSync(file)) 
    { 
     saved = fs.writeFileSync(file, content, 'utf8'); 
    } 

    console.log(saved); // undefined or false, never true 

    response.send(saved ? 200 : 500, saved ? 'saved' : 'error'); // 500, error 
}; 

Czy if (typeof saved === 'undefined') saved = true; jedyna opcja? Czuje się hacky.

Odpowiedz

49

Zgodnie z node.js source-codefs.writeFileSync nic nie zwraca.

Rzuca obiekt Error, jeśli coś pójdzie nie tak. Powinieneś więc napisać fs.writeFileSync(file, content, 'utf8'); w bloku try-catch.

+1

Chyba wyjątek połowu jest droga, dzięki. – jolt

+0

Nie ma za co :) – fardjad

+0

Mój kod nie rzuca żadnego błędu, a nawet nie tworzy pliku. fs.writeFileSync (__ dirname + "./../ BusinessNames/currentDB.txt", "nul.vyp"); . Nie tworzenie pliku, ponieważ nul jest zastrzeżonym słowem kluczowym w systemie Windows – Himanshu

5

fs.writeFileSync nie zwraca żadnej wartości, jeśli nie ma wyjątków, co oznacza, że ​​zapis się powiódł; inaczej nie.

może chcesz spróbować wersji asynchronicznej pliku odczytać

fs.exists(file, function (exists) { 
    if (exists) { 
    fs.writeFiles(file, content, 'utf-8', function (err) { 
     if (err) { 
     response.send("failed to save"); 
     } else { 
     response.send("succeeded in saving"); 
     } 
    } else { 
    console.log('file does not exists'); 
    } 
} 
+2

Wersja asynchroniczna nie pasuje do odpowiedzi HTTP, dlatego wybieram metodę synchronizacji. – jolt

+1

Pominąłem 3 parametry ... :( –

+0

@jolt Wiem, że spóźniam się na imprezę, ale nie widzę niczego złego w używaniu ich z żądaniami HTTP. Wszystko, co musisz zrobić, to zrobić drugą operację w callback "sukcesu". – Jared

Powiązane problemy