Nodeサーバ、koaのミドルウェアkoa-body、nodeファイルアップロード、FormData上
21292 ワード
なぜkoa-bodyを使うのですか?
XMLHttpRequest 2から送信されるFormDataデータを使用する場合、koaサービスではkoa-bodyのほか、busboy、body-parse、multer、formidable、multipartyが正しく取得できないことも、テストで発見された問題です.
koa-body
koaミドルウェアは、機能的なリクエストボディ解析器です.Multipart、urlencoded、jsonリクエストボディをサポートします.ExpressのbodyParser、multerと同様の機能を提供します.
プロジェクト内インストール
npm install koa-bodyまたはyarnadd koa-body
サポート要求タイプ multipart/form-data application/x-www-urlencoded application/json
基本使用例要求例および結果
詳細については、以下を参照してください.https://github.com/dlau/koa-body/blob/master/examples/multipart.js
コンビネーションkoa-router使用例
通常、必要に応じて本体を解析するのが望ましいが、ミドルウェアの組み合わせをサポートするルータを使用すると、一部のルーティングにのみ本体を注入することができる.
optionsパラメータ
koa-bodyのオプションに使用できます.4つのカスタムオプションがあり、その他はraw-bodyとformidableから来ています. koa-bodyパラメータ パラメータ名
説明
を選択します.
デフォルト
patchNode
ctxにパッチを書き込む.reqノードで
Boolean
false
patchKoa
ctxにパッチを書き込む.requestノード
Boolean
true
jsonLimit
JSONデータ体のサイズ制限
String/Integer
1mb
formLimit
フォームリクエストのサイズを制限
String/Integer
56kb
textLimit
text bodyのサイズを制限する
String/Integer
56kb
encoding
フォームのデフォルトエンコーディング
String
utf-8
multipart
Multipart-formdateのフォームがサポートされているかどうか
Boolean
false
urlencoded
urlencodedのフォームをサポートするかどうか
Boolean
true
text
text/plainのフォームを解析するかどうか
Boolean
true
json
jsonリクエストボディを解析するかどうか
Boolean
true
jsonStrict
json厳格モードを使用するかどうか、trueは配列とオブジェクトのみを処理します.
Boolean
true
formidable
Multipartに関するオプションの詳細設定
Object
onError
エラー処理
Function
stict
厳格モード、有効にした後にGET、HEAD、DELETE要求を解析しません
Boolean
true formidableパラメータ パラメータ名
説明
を選択します.
デフォルト
maxFields
フィールド数の制限
Integer
1000
maxFieldsSize
制限フィールドの最大値
Integer
2mb (2 * 1024 * 1024)
uploadDir
ファイルアップロードフォルダの設定
String
os.tmpDir()
keepExtensions
元のファイル接尾辞を保持
Boolean
false
hash
受信ファイルの検証を計算する場合は、「sha 1」または「md 5」に設定します.
String
false
multipart
マルチファイルアップロードをサポートするかどうか
Boolean
true
onFileBegin
開始時にファイルを特殊にコールバックします.ディスクにファイルを保存する前にファイルの名前を変更するなど
Function formidableのonFileBegin 詳細については、以下を参照してください.https://github.com/felixge/node-formidable#filebegin
厳格モードの説明について
詳細については、以下を参照してください.http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#section-6.3 GET、HEAD、およびDELETE要求は、要求体に意味を定義していないが、これは、いくつかの例で無効であることを意味しない. デフォルトでは、koa-bodyは厳格モード です.
プロジェクト構成事例
koa-body公式ドキュメント
詳細については、以下を参照してください.https://github.com/dlau/koa-body
XMLHttpRequest 2から送信されるFormDataデータを使用する場合、koaサービスではkoa-bodyのほか、busboy、body-parse、multer、formidable、multipartyが正しく取得できないことも、テストで発見された問題です.
koa-body
koaミドルウェアは、機能的なリクエストボディ解析器です.Multipart、urlencoded、jsonリクエストボディをサポートします.ExpressのbodyParser、multerと同様の機能を提供します.
プロジェクト内インストール
npm install koa-bodyまたはyarnadd koa-body
サポート要求タイプ
基本使用例
const Koa = require('koa');
const koaBody = require('koa-body');
const app = new Koa();
app.use(koaBody());
app.use(ctx => {
//
console.log(`files:${
util.inspect(ctx.request.body.fields)}; body:${
util.inspect(ctx.request.body.files)}`);
ctx.body = ctx.request.body;
});
app.listen(3000);
$ node index.js
$ curl -i http://localhost:3000/users -d "name=test"
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 29
Date: Wed, 03 May 2017 02:09:44 GMT
Connection: keep-alive
//
Request Body: {
"name":"test"}%
詳細については、以下を参照してください.https://github.com/dlau/koa-body/blob/master/examples/multipart.js
コンビネーションkoa-router使用例
通常、必要に応じて本体を解析するのが望ましいが、ミドルウェアの組み合わせをサポートするルータを使用すると、一部のルーティングにのみ本体を注入することができる.
const Koa = require('koa');
const app = new Koa();
const router = require('koa-router')();
const koaBody = require('koa-body');
router.post('/users', koaBody(),(ctx) => {
//
console.log(`files:${
util.inspect(ctx.request.body.fields)}; body:${
util.inspect(ctx.request.body.files)}`);
ctx.body = ctx.request.body;
});
app.use(router.routes());
app.listen(3000);
//
console.log('curl -i http://localhost:3000/users -d "name=test"');
optionsパラメータ
koa-bodyのオプションに使用できます.4つのカスタムオプションがあり、その他はraw-bodyとformidableから来ています.
説明
を選択します.
デフォルト
patchNode
ctxにパッチを書き込む.reqノードで
Boolean
false
patchKoa
ctxにパッチを書き込む.requestノード
Boolean
true
jsonLimit
JSONデータ体のサイズ制限
String/Integer
1mb
formLimit
フォームリクエストのサイズを制限
String/Integer
56kb
textLimit
text bodyのサイズを制限する
String/Integer
56kb
encoding
フォームのデフォルトエンコーディング
String
utf-8
multipart
Multipart-formdateのフォームがサポートされているかどうか
Boolean
false
urlencoded
urlencodedのフォームをサポートするかどうか
Boolean
true
text
text/plainのフォームを解析するかどうか
Boolean
true
json
jsonリクエストボディを解析するかどうか
Boolean
true
jsonStrict
json厳格モードを使用するかどうか、trueは配列とオブジェクトのみを処理します.
Boolean
true
formidable
Multipartに関するオプションの詳細設定
Object
onError
エラー処理
Function
stict
厳格モード、有効にした後にGET、HEAD、DELETE要求を解析しません
Boolean
true
説明
を選択します.
デフォルト
maxFields
フィールド数の制限
Integer
1000
maxFieldsSize
制限フィールドの最大値
Integer
2mb (2 * 1024 * 1024)
uploadDir
ファイルアップロードフォルダの設定
String
os.tmpDir()
keepExtensions
元のファイル接尾辞を保持
Boolean
false
hash
受信ファイルの検証を計算する場合は、「sha 1」または「md 5」に設定します.
String
false
multipart
マルチファイルアップロードをサポートするかどうか
Boolean
true
onFileBegin
開始時にファイルを特殊にコールバックします.ディスクにファイルを保存する前にファイルの名前を変更するなど
Function
厳格モードの説明について
詳細については、以下を参照してください.http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#section-6.3
プロジェクト構成事例
const Koa = require('koa');
const bodyparse = require('koa-body');
const app = new Koa();
const path = require('path');
const util = require('util');
/**
*
* @links: https://github.com/dlau/koa-body
* , post、get , (raw ) ctx.files ctx.body
*/
app.use(
bodyparse({
multipart: true, //
formidable: {
uploadDir: path.join(__dirname, 'public/upload/'), //
keepExtensions: true, //
maxFieldsSize: 2 * 1024 * 1024, // , 2M
onFileBegin: (name, file) => {
//
const fp = path.join(__dirname, 'public/upload/');
if (!fs.existsSync(fp)) {
// “public/upload/”
fs.mkdirSync(fp); //
}
console.log(`bodyparse: name:${
name}; file:${
util.inspect(file)}`);
}
}
})
);
app.use(ctx => {
/* body , :
{
fields: { lessonid: '1', bookid: '1', folder: 'gxkt/audio', parse: '1' },
files: { audioData:
File {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
size: 47830,
path: 'E:\\Prj\
uoya\\upload\\temp\\upload_066afb801e15d501aa2d7b144a394a57',
name: 'blob',
type: 'audio/wav',
hash: null,
lastModifiedDate: 2018-12-05T06:02:31.049Z,
_writeStream: [Object]
}
}
}
*/
console.log(`files:${
util.inspect(ctx.request.body.fields)}; body:${
util.inspect(ctx.request.body.files)}`);
ctx.body = ctx.request.body;
});
app.listen(3000);
koa-body公式ドキュメント
詳細については、以下を参照してください.https://github.com/dlau/koa-body