2017-12-25 22 views
0

これはproductsModel.jsはmulterを使用してファイルをアップロードする方法/フォームをform-dataに投稿する方法?

'use strict'; 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var productsSchema = new Schema({ 
     name: { 
     type: String, 
     required: true 
     }, 
     cost: { 
      type: Number 
     }, 
     product_imagePaths: [{ 
      type: String 
     }] 
    }); 

module.exports = mongoose.model('Products', productsSchema); 

をファイルであり、これは私のproductsController.js私server.js

var mongoose = require('mongoose'), 
Products = mongoose.model('Products'); 


exports.uploadProducts = function(req,res) { 
    var new_product = new Products(req.body) 
    new_product.save(function(err,product){ 
     if(err) { 
      res.send(err); 
     } 
     res.status = 200; 
     res.json({ 
      "status":"success" 
     }); 
    }); 
}; 

productsRou​​tes.js

'use strict'; 
module.exports = function (app) { 
    var productsController = require('../controllers/productsController'); 

    app.route('/products') 
    .get(productsController.fetchAllProducts) 
    .post(productsController.uploadProducts); 
}; 

のコードです

// mongoose instance connection url connection 
mongoose.Promise = global.Promise; 
var db = mongoose.connect('mongodb://localhost/abcd', { 
    useMongoClient: true 
}); 


// body parser middleware 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true })); 

// route 
var userRoutes = require('./api/routes/userRoutes'); 
var aboutUsRoutes = require('./api/routes/aboutusRoutes'); 
var productsRoutes = require('./api/routes/productsRoutes'); 
userRoutes(app); 
aboutUsRoutes(app); 
productsRoutes(app); 

これは私がx-www-form-urlencodedを使用しているときに機能します。しかし、Postメソッド(productsController.js内のuploadProducts)を介してファイルをアップロードしたいので、form-dataを介してのみ行うことができます。ただし、form-dataでは動作しません。私はmulterform-dataのアップロードに使うことができると読んでいますが、私は次の方法論でそれをどのように使用するのか分かりません。

+0

クライアント部分を書き込むためにフレームワークを使用しましたか? –

+0

私は角度4を使用しています。 –

答えて

0

uploadProducts関数を呼び出す前に、ミドルウェアとしてmulterをミドルウェアとして使用します。ここで

これは、あなたがreq.file.bufferとあなたのproductsController.jsにアクセスすることができ、あなたのイメージのBufferを作成しますproductRoutes.js

'use strict'; 
const multer = require('multer') 
const storage = multer.memoryStorage() 
const upload = multer({ 
     storage: storage, 
     limits: { 
     fileSize: 5000000, 
     files: 1 
     } 
    }) 
module.exports = function (app) { 
    var productsController = require('../controllers/productsController'); 

    app.route('/products') 
    .get(productsController.fetchAllProducts) 
    .post(upload.single('img'), productsController.uploadProducts); 
}; 

のための設定例です。

upload.singleは、multerの組み込み関数です。他の機能の詳細についてはhereをご覧ください。またimgは入力フィールドの名前と一致する必要があります。つまり、<input type="file" name="img">

これは多くの方法のうちの1つです。それが役に立てば幸い!

関連する問題