如何使用multer上传文件/在表格数据中发帖?

问题描述 投票:0回答:1

这是productsModel.js文件

'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的代码

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);
};

在我的server.js中

// 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。我读到multer可用于form-data上传,但我对如何在以下方法中使用它毫无头绪。

node.js mongoose routes multer form-data
1个回答
1
投票

在调用multer函数之前,您想使用uploadProducts作为中间件。

以下是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);
};

这将创建你的图像的Buffer,你可以用productsController.js在你的req.file.buffer访问。

请注意,upload.singlemulter的内置函数。阅读更多关于其他功能hereimg也需要匹配输入字段的名称,即<input type="file" name="img">

这只是众多方法中的一种。希望能帮助到你!

© www.soinside.com 2019 - 2024. All rights reserved.