如何使用multer、nodejs和mysql发布表单数据(图像和数据)

jtjikinw  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(698)

我想用nodejs、multer和mysql上传一个带有表单数据的图像。
如下所示,我的代码:
mysql表:

CREATE TABLE produits (
 Codep bigint(21) NOT NULL AUTO_INCREMENT,
 Description varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 Img varchar(255) NOT NULL,
 PRIMARY KEY (Codep )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10;

我的路由器:

const path = require('path');
const multer = require('multer');
const crypto = require('crypto');
const fs = require('fs');
var imge = "";
var storage = multer.diskStorage({
  destination: function (req, file, cb){
    cb(null, '../public/uploads')
  },
  filename: function (req, file, cb){
    crypto.pseudoRandomBytes(32, function(err, raw){
        imge = raw.toString('hex') + path.extname(file.originalname);
        cb(null, imge);
    })
  }
});

var upload = multer({storage: storage});
exports.ajouterprod = function(req, res) {

    console.log("req", req.body);
    var today = new Date();
    var produits = {
        "Description": req.body.Description,
        "Img":  imge
    }
      upload.single('produits[Img]')
    connection.query('INSERT INTO produits SET ?', produits, function(error, results, fields) {
        if (error) {
            console.log("error ocurred", error);
            res.send({
                "code": 400,
                "failed": "error ocurred"
            })
        }
        else {
            res.send({
                "code": 200,
                "success": "produit registered sucessfully"
            });
        }
    })
};

我的服务器:

router.post('/ajouterprod', produits.ajouterprod);

当我试着和 Postman 在一起时,你会看到:

我得到:

req {}
error ocurred { Error: ER_BAD_NULL_ERROR: Column 'Description' cannot be null

我该怎么修?

goqiplq2

goqiplq21#

你的问题在于 req.body . 因为它返回一个空对象,mysql框架试图将description设置为null,这是无效的。做一个 console.log(produits) 会显示它们都是空的/未定义的。
我建议您仔细阅读这个答案,因为您需要使用一个能够处理文件上传的主体解析器。
此外,似乎您使用Mutter是错误的:

var upload = multer({storage: storage}).single('Img');
exports.ajouterprod = function(req, res) {
    upload(req, res, function(imageUploadErr) {
        console.log("req", req.body);
        var today = new Date();
        var produits = {
            "Description": req.body.Description,
            "Img":  imge // (Wrong variable name, I think you want req.body.Img)
        }

        connection.query('INSERT INTO produits SET ?', produits, function(error, results, fields) {
            if (error) {
                console.log("error ocurred", error);
                res.send({
                    "code": 400,
                    "failed": "error ocurred"
                })
            }
            else {
                res.send({
                    "code": 200,
                    "success": "produit registered sucessfully"
                });
            }
        })
    });
};

相关问题