Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create a line break in a JavaScript string to feed to NodeJS to write to a text file?

Tags:

I've created a simple HTML page that takes some input from the user to store on a server to be retrieved later -- this is how the text is treated when the user clicks a submit button (I've placed numbered comments under the key lines but provide the surrounding code for context):

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

The request is sent to a NodeJS server I am running locally, which (within the http.createServer callback) does the following:

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'S 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 + ' })');         }     }); } 

Assuming the user types and submits "this is a line of text", the output on the server is a text file called jsonp-storage-2.txt containing this:

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

After all that, my question is quite simple. How do I prettify the output in the text file?

The code needs work but I'm thinking of using this to try storing larger objects for reading later. However, at the server end, I would like the files (for now) to be easy for me to read when opening them with Notepad, for example.

I have tried using \n and \t like so:

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

I've also tried \r. But the lines remain unbroken.

Some answers suggest that I can only do this at the level of the encoded string or after the file has been written. Perhaps I missed something simple. Is there a way to do it by manipulating my jsonText variable?

UPDATE:

Just to be clearer about the output desired -- currently the content of the text file produced looks like this:

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

But I'd like to know if it can be produced like this:

{     "text": "this is a line of text" } 
like image 976
guypursey Avatar asked Jan 05 '13 15:01

guypursey


People also ask

How do you create a break in JavaScript?

To create a line break in JavaScript, use “<br>”. With this, we can add more than one line break also.

How do you add a line break in string?

Inserting a newline code \n , \r\n into a string will result in a line break at that location. On Unix, including Mac, \n (LF) is often used, and on Windows, \r\n (CR + LF) is often used as a newline code.


1 Answers

Use

var os = require('os'); var jsonText = '{' + os.EOL + '\t"text": "' + origText + '"' + os.EOL + '}'; 
like image 72
Christophe Keller Avatar answered Oct 05 '22 16:10

Christophe Keller