私はいくつかのテキストフィールドとファイル入力を持つフォームを持っていますが、これは空ではありません。まずテキストフィールドを使っていくつかの操作を行います(データベースに追加する)ファイルをアップロードします。これは私のコードです。ファイルをアップロードしないでmulter access req.body
var multer = require('multer');
var getFields = multer();
router.post('/add',getFields.array(),function(req,res){
var artist = new ArtistModel({
name : req.body.name.toLowerCase(),
description:req.body.description,
});
次に、私のDBとコールバックでアーティストを追加します。ファイルをアップロードします。しかし、私はファイルの入力があり、 "Unexpected fields"というエラーが出るため、単にgetFields.array()を使用することはできません.Array()を使用しないと、POSTリクエストボディを取得できません。とにかくフォームのテキストフィールドをenctype = "multipart/form-data"で取得してからファイルをアップロードするのですか?私はファイルをアップロードすることなく、テキストフィールドを取得することができたDaveに
更新#2 おかげで、私は成功したが、私はその後、 Iファイルをアップロードする方法を見つけ出すことができませんでした、私のデータベースに私のアーティストを追加しました私addToDbのコールバック関数で新しい変数を作成しました:しかしupload(req,res,err)
doesntのを呼び出す
var storage = multer.diskStorage({
destination: function (req, file, cb) {
//cb(null, 'artistsMedia/drake/songs')
var dir = 'artistsMedia/' + req.body.name.toLowerCase()+ '/images';
mkdirp(dir,err => cb(err,dir))
},
filename: function (req, file, cb) {
cb(null, req.body.name.toLowerCase() +'-'+ file.fieldname +'-'+ Date.now() + path.extname(file.originalname)) //Appending extension
},
});
var upload = multer({
storage: storage,
limits :{fileSize :52428800}
}).fields([{name:'Logo',maxCount:1},{name:'artistHome',maxCount:1},{name:'otherImgs',maxCount:10}]);
が動作するように見えます。
:あなたは何も提出されたファイル、使用multerの
none()
機能がないと確信している場合RESTのやり方はアーティストを作成し、Locationレスポンスヘッダ(おそらく新しく作成されたオブジェクトを持つボディ)を持つ201 CREATEDレスポンスを返すことです。クライアントは、レスポンス本文またはレスポンスヘッダーを解析して新しいオブジェクトのIDを特定し、ファイルをPOSTするための*秒*要求を行います。 (または、最初のリクエストでファイルを送信してすぐにすべて実行できます)。 – Dave