javascript - 当与 multer 一起用于多部分数据时,hasOwnproperty 变得未定义

标签 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 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 是一个无原型(prototype)对象:它是使用 Object.create(null) 创建的,因此不会从 Object.prototype 继承 hasOwnProperty。这是一件好事,因为如果用户传递名为 hasOwnProperty 的字段,他们将能够破坏您的代码。

通常使用 in 运算符:

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;

关于javascript - 当与 multer 一起用于多部分数据时,hasOwnproperty 变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43320652/

相关文章:

javascript - d3 svg 填满屏幕

javascript - 动画范围从宽度 0 到自动

javascript - 使用 $http 服务将数据发布到本地 json 文件时未找到元素错误

javascript - bookshelf.js 未加载关系

node.js - React应用程序中的Socket io多个连接

javascript - 无法将数据发送到 API 服务器 'Error trying to diff ' [对象对象 ]'. Only arrays and iterables are allowed'

mysql - 使用 mysql 和 node.js 更新 foreach 外部的变量值

javascript - knex 中的排水管连接需要比预期更多的时间

javascript - 循环内的空字符串或 null 检查

javascript - Node 自动创建 session 变量?