Как создать разрыв строки в строке JavaScript для подачи в NodeJS для записи в текстовый файл?

Я создал простую HTML-страницу, которая принимает некоторые данные от пользователя для хранения на сервере, который будет получен позже - так обрабатывается текст, когда пользователь нажимает кнопку отправки (я разместил пронумерованные комментарии под ключевыми строками, но обеспечивающий окружающий код для контекста):

var origText = $('#input-field').val(),
        // 1. GETS WHATEVER USER TYPED INTO INPUT FIELD
    jsonText = '{ "text": "' + origText + '" }',
        // 2. WRAPS IT AN OBJECT STRING
    ajaxText = encodeURIComponent(jsonText);
        // 3. ENCODES THE STRING FOR USE WITH AJAX

$.ajax({
    url: 'http://localhost:8124/',
    data: 'save=' + ajaxText + '&fn=save',
        // 4. THE ENCODED STRING IS ADDED TO THE QUERY SECTION OF THE AJAX REQUEST
    dataType: "jsonp",
    cache: false,
    timeout: 5000,
    success: function(data) {
        $("#input-ready").html(data.save.text);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert('error ' + textStatus + " " + errorThrown);
    }
});

Запрос отправляется на сервер NodeJS, который я запускаю локально, который (в рамках обратного вызова http.createServer) выполняет следующие действия:

var queryObj = url.parse(req.url, true).query;
    // 1. GET THE QUERY PART OF THE REQUEST/URL AS AN OBJECT
res.writeHead(200, {'Content-Type': 'application/javascript'});
    // 2. PREPARE SERVER RESPONSE AS JAVASCRIPT
queryObj.fn = queryObj.fn || '';
queryObj.save = queryObj.save || '';
queryObj.callback = queryObj.callback || '';
    // 3. ENSURE THE PROPERTIES NEEDED ARE DEFINED, EVEN IF FALSE-Y
if (queryObj.fn === 'save') {
    // 4. IF THE REQUEST IS TO SAVE THEN WRITE THE USER INPUT AS OBJECT TO A TEXT FILE
    fs.writeFile('jsonp-storage-2.txt', queryObj.save, function (err) {
        if (err) {
            throw err;
        } else {
            console.log('Saved message successfully.', 'Ready to be read now.');
            res.end(queryObj.callback +
                '({ fn: "' + queryObj.fn + '", save: ' + queryObj.save + ' })');
        }
    });
}

Предполагая, что пользователь вводит и передает "это строка текста", вывод на сервере представляет собой текстовый файл с именем jsonp-storage-2.txt, содержащий это:

{ "text": "this is a line of text" }

В конце концов, мой вопрос довольно прост. Как префикс вывода в текстовом файле?

Код нуждается в работе, но я думаю об использовании этого, чтобы попытаться сохранить более крупные объекты для чтения позже. Тем не менее, на сервере я хотел бы, чтобы файлы (на данный момент) были легко читаемы при открытии их с помощью Notepad, например.

Я попытался использовать \n и \t следующим образом:

jsonText = '{\n\t"text": "' + origText + '"\n}',

Я также пробовал \r. Но линии остаются неразрывными.

Некоторые ответы показывают, что я могу сделать это на уровне закодированной строки или после того, как файл был записан. Возможно, я пропустил что-то простое. Есть ли способ сделать это, манипулируя моей переменной jsonText?

UPDATE:

Просто чтобы уточнить желаемый результат - в настоящее время содержимое созданного текстового файла выглядит следующим образом:

{ "text": "this is a line of text" }

Но я хотел бы знать, можно ли это сделать следующим образом:

{
    "text": "this is a line of text"
}

Ответы

Ответ 1

Использование

var os = require('os');
var jsonText = '{' + os.EOL + '\t"text": "' + origText + '"' + os.EOL + '}';

Ответ 2

Оказывается, при написании строки в текстовый файл с Node.js [EDIT: в Windows] используйте \r\n для новой строки.

Как и в случае закодированных разрывов строк, необходимы как возврат, так и новая строка. Таким образом, строка кода должна быть такой, а не просто \r или просто \n:

jsonText = '{\r\n\t"text": "' + origText + '"\r\n}',

Результирующее содержимое файла теперь отображается по желанию:

{
    "text": "this is a line of text"
}