Javascript 当与multer一起用于多部分数据时,hasOwnproperty变得未定义
我的代码如下所示:Javascript 当与multer一起用于多部分数据时,hasOwnproperty变得未定义,javascript,node.js,express,multer,Javascript,Node.js,Express,Multer,我的代码如下所示: var express = require('express'); var mongoose = require('mongoose'); var bodyParser = require('body-parser'); var multer = require('multer'); var user = require('./../model/user'); var path = require('path'); var upload = multer(); var aws
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var multer = require('multer');
var user = require('./../model/user');
var path = require('path');
var upload = multer();
var awsUpload = require('./../config/fileUpload.js');
var Promise = require('promise');
var item = require('./../model/items.js');
var item_image = '';
var storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, './public/images')
},
filename: function(req, file, callback) {
item_image = file.fieldname + '-' + Date.now() + path.extname(file.originalname);
callback(null, item_image)
}
});
var itemAdd = function(req, res) {
upload = multer({
limits: {
fileSize: 1000000,
files: 1
},
storage: storage,
fileFilter: function(req, file, callback) {
var ext = path.extname(file.originalname)
if (ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
return callback(res.end('Only images are allowed'), null)
}
callback(null, true);
}
}).single('item_img');
upload(req, res, function(err) {
var foodtruck_id = req.body.foodtruck_id;
var newItem = new item();
var itemList = [];
newItem.item_name = req.body.item_name;
newItem.item_tag = req.body.item_tag;
newItem.item_description = req.body.item_description;
newItem.item_category = req.body.item_category;
newItem.item_discount_price = req.body.item_discount_price;
for (var key in req.body) {
if (req.body.hasOwnProperty(key)) {
if (key == 'item_illustrations') {
newItem.item_illustrations = req.body[key];
}
}
}
newItem.item_stock = req.body.item_status;
newItem.item_price = req.body.item_price;
if ((foodtruck_id) && (foodtruck_id.trim() != '')) {
foodtruck.findById(foodtruck_id.trim(), function(err, foodtrucks) {
if (err)
res.json({
status: '500',
message: 'There is no data available'
});
newItem.save(function(err, savedItem) {
if (!err) {
foodtrucks.item_list.push(savedItem._id);
foodtrucks.save(function(err, truck) {
foodtruck.find({
_id: truck._id
}).populate('item_list').exec(function(err, foodtrucks) {
res.json({
status: '200',
message: 'New item added successfully',
data: foodtrucks
});
});
});
} else {
res.json({
status: '500',
message: 'Error while saving new item'
});
}
});
});
}
});
};
app.js
app.post('/test',itemAddition);
现在这里发生的是,当我将req.body.hasOwnProperty与x-www-formurlencoded一起使用时,它工作得很好,但是每当我用multer(多部分数据)添加它时,它都会给我req.body.hasOwnProperty不是一个函数。有什么方法可以解决这个问题吗?
req.body
是一个没有原型的对象:它是用对象创建的。create(null)
因此不会继承对象的hasOwnProperty
。prototype
。这是一件好事,因为如果用户传递了一个名为hasOwnProperty
的字段,他们将能够破坏您的代码
请改用中的运算符,通常:
if (key in req.body) {
但在循环的情况下,您根本不需要检查:
for (var key in req.body) {
if (key == 'item_illustrations') {
newItem.item_illustrations = req.body[key];
}
}
在这种特殊情况下,只需在没有循环的情况下获得所需的值:
newItem.item_illustrations = req.body.item_illustrations;
req.body
是一个无原型的对象:它是使用object.create(null)
创建的,因此不会从对象.prototype继承hasOwnProperty
。这是一件好事,因为如果用户传递了一个名为hasOwnProperty
的字段,他们将能够破坏您的代码
请改用
中的运算符,通常:
if (key in req.body) {
但在循环的情况下,您根本不需要检查:
for (var key in req.body) {
if (key == 'item_illustrations') {
newItem.item_illustrations = req.body[key];
}
}
在这种特殊情况下,只需在没有循环的情况下获得所需的值:
newItem.item_illustrations = req.body.item_illustrations;
不要在所有键都由用户输入控制的对象上使用hasOwnProperty
。这就是为什么它是一个没有原型的物体。相反,key in req.body
在控制台的req.body
内容中可以得到什么?不要在所有键都由用户输入控制的对象上使用hasOwnProperty
。这就是为什么它是一个没有原型的物体。相反,输入请求正文
控制台中的req.body
内容是什么?我正在从邮递员那里传递项目插图[0],项目插图[1]等等。这种功能是否适用于您的解决方案?@mrugeshtaker:Dunno,试试看,可能会。从邮递员那里,我正在传递item_插图[0],item_插图[1]等等。这种功能能与您的解决方案配合使用吗?@mrugeshtaker:不知道,试试看,可能会。