1

クライアントからのデータを解析するという奇妙な問題があります。

すべての「ブール値 true」が「文字列 true」に変換され、「未定義」についても同じであるため、これらのフィールドで「if」を実行できないことがわかりました。

ここに私が持っているものがあります:

var bodyParser = require('body-parser');
var app = express();
app.post('/someroute',function(req,res,next){
   console.log(typeof req.someBooleanValue);
});

私は常に「文字列」を取得し、クライアントが送信したものであるため、コンソールでブール値を期待しています。

content-type が「application/json」に設定されている場合、正常に動作するようになりました

body パーサーが「マルチパート」コンテンツ タイプで機能しないことを理解しています。しかし、その後、私の選択肢は何ですか?multiparty と multr を試しました。しかし、それらを解析した後でも、フィールドは文字列として取得されます。

これを処理する方法は、コンテンツ タイプをチェックする小さなユーティリティを作成し、JSON.parse('fields') などを使用して引用符の醜い削除を行う以外にありませんか?

4

2 に答える 2

0

それは(一種の)クライアントに依存します。

私の知る限り、(ブラウザによって)要素multipart/form-dataを介してアップロードされたパーツは入力されません。テキスト(文字列)コンテンツ(「通常の」フィールドの場合)またはバイナリコンテンツ(「ファイル」フィールドの場合)のいずれかが含まれています。<form>

つまり、サーバー側のパーサーが提供するすべてのフィールドは文字列になります。明示的なコードがなければ、multer/multiparty/etc は文字列値がtrueブール値であることを認識できないため、各フィールドに何を含める必要があるかの知識に基づいて、自分で変換/キャストを実行する必要があります。 .

cURL などの CLI クライアントを使用している場合は、JSON "ファイル" を個別のパーツとしてアップロードできます (ここで説明されています)。JSON.parse()着信データは引き続き文字列として渡されるため、引き続き呼び出す必要があります。

于 2015-11-02T21:20:55.763 に答える
0

multipart/form-data でファイルのアップロードを処理するために、express.js を使用した REST アプリケーションにBusboyを使用していますが、正常に動作しています。

例は、プロジェクトのページで入手できます。ファイルのアップロードを処理する必要がある場合は、ファイルを保存するために WriteableStream を使用するイベントのリスナーがあること、およびbusboy 自体によって発生'finish'したイベントだけに依存しないことを確認してください。'finish'

于 2015-11-02T21:14:11.293 に答える