如何 post 使用 MULTER、Nodejs 和 MySQL 形成数据(图像和数据)
How to post form data ( image and data ) using MULTER, Nodejs and MySQL
我想使用 NodeJS、Multer 和 MySQL 在我的表单数据上上传包含数据的图像。
如下所示,我的代码:
Table 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
请问我该如何解决?
您的问题出在req.body
。因为它返回一个空对象,所以 MySQL 框架试图将 Description 设置为 null,这是无效的。做一个 console.log(produits)
会显示它们都是 null/undefined.
我建议您浏览 this answer,因为您需要使用可以处理文件上传的正文解析器。
此外,您似乎用错了 multer:
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"
});
}
})
});
};
我想使用 NodeJS、Multer 和 MySQL 在我的表单数据上上传包含数据的图像。
如下所示,我的代码:
Table 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
请问我该如何解决?
您的问题出在req.body
。因为它返回一个空对象,所以 MySQL 框架试图将 Description 设置为 null,这是无效的。做一个 console.log(produits)
会显示它们都是 null/undefined.
我建议您浏览 this answer,因为您需要使用可以处理文件上传的正文解析器。
此外,您似乎用错了 multer:
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"
});
}
})
});
};