2013-03-21 25 views
34

Tôi có một con đường đơn giản định nghĩa với express.js:Kiểm tra nếu writeFileSync đã viết thành công tệp tin

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

if (typeof saved === 'undefined') saved = true; lựa chọn duy nhất? Cảm thấy hacky.

Trả lời

49

Theo node.js source-codefs.writeFileSync không trả lại bất kỳ thứ gì.

Nó ném đối tượng Error nếu có sự cố. Vì vậy, bạn nên viết fs.writeFileSync(file, content, 'utf8'); trong khối try-catch.

+1

Tôi đoán là ngoại lệ bắt là con đường để đi, cảm ơn. – jolt

+0

Bạn được chào đón :) – fardjad

+0

Mã của tôi không ném bất kỳ lỗi nào, và thậm chí nó không tạo tệp. fs.writeFileSync (__ dirname + "./../ BusinessNames/currentDB.txt", 'nul.vyp'); . Không tạo tệp vì nul là từ khóa được đặt trước trong cửa sổ – Himanshu

5

fs.writeFileSync không trả về bất kỳ giá trị nào, nếu không có ngoại lệ nào xảy ra có nghĩa là lưu thành công; nếu không thì không thành công.

bạn có thể muốn thử phiên bản async của tập đọc

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

Phiên bản async không hoạt động tốt với các phản hồi HTTP, đó là lý do tại sao tôi sẽ đồng bộ hóa. – jolt

+1

Tôi đã bỏ qua các thông số thứ 3 ... :( –

+0

@jolt Tôi biết tôi đã trễ bữa tiệc nhưng tôi không thấy có vấn đề gì khi sử dụng chúng với các yêu cầu HTTP. Tất cả những gì bạn cần làm là thực hiện các thao tác khác trong cuộc gọi lại "thành công". – Jared

Các vấn đề liên quan