2012-06-13 3 views
3

У меня есть несколько процессов node.js. Я хочу добавить только одну строку в один файл в каждом запросе (например, файл журнала в nginx, apache и т. Д.). Каков наилучший способ? Простой:Как добавить строку в файл?

fs.open(file, "a", 0744, function (err, fd) { 
    if (err) throw err; 
    fs.write(fd, data, null, 'utf8', function (err, written) { 
     if (err) throw err; 
    }); 
}); 

или еще?

ответ

4

Это будет работать, однако это может быть не лучшее решение, если оно постоянно открывает и закрывает файл. Для чего-то с более быстрой записью я бы постарался сравнить его с fs.createWriteStream, особенно потому, что это дает вам область, которую вы можете использовать в маршрутах.

var fs = require("fs"); 

    //set dummy data as random number 
var data = Math.floor(Math.random()*11); 
    //Set our log file as a writestream variable with the 'a' flag 
var logFile = fs.createWriteStream('log.txt', { 
    flags: "a", 
    encoding: "encoding", 
    mode: 0744 
}) 
    //call the write option where you need to append new data 
logFile.write(new Date().toSting + ': ' data); 
logFile.write(new Date().toSting + ': ' data); 
0

Другое решение - fs.appendFile. Как отмечает Sdedelbrock, fs.createWriteStream намного, намного быстрее, чем этот метод, поскольку ему не нужно постоянно открывать и закрывать файл. Я закодировал небольшой бенчмарк на своей машине, и он примерно в 3 раза быстрее, определенно стоит того.

Смежные вопросы