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 に答える