21

我创建了一个简单的 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'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 + ' })');
        }
    });
}

假设用户键入并提交“这是一行文本”,服务器上的输出是一个名为 jsonp-storage-2.txt 的文本文件,其中包含:

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

毕竟,我的问题很简单。如何美化文本文件中的输出?

代码需要工作,但我正在考虑使用它来尝试存储更大的对象以供以后阅读。但是,在服务器端,我希望文件(现在)在使用记事本打开文件时易于阅读。

我尝试过使用\n并且\t喜欢这样:

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

我也试过了\r。但线仍然没有中断。

一些答案表明我只能在编码字符串级别在文件写入之后执行此操作。也许我错过了一些简单的事情。有没有办法通过操纵我的jsonText变量来做到这一点?

更新:

只是为了更清楚地了解所需的输出——目前生成的文本文件的内容如下所示:

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

但我想知道它是否可以像这样生产:

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

2 回答 2

38

利用

var os = require('os');
var jsonText = '{' + os.EOL + '\t"text": "' + origText + '"' + os.EOL + '}';
于 2013-05-30T06:03:31.943 回答
8

事实证明,使用 Node.js [编辑:在 Windows 中]将字符串写入(文本)文件时,使用\r\n换行符。

编码换行符一样,回车和换行都是必要的。所以代码行需要是这样的,而不是仅仅\r或只是\n

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

结果文件的内容现在可以根据需要显示:

{
    "text": "this is a line of text"
}
于 2013-01-07T11:55:51.893 回答