类型错误:无法读取空表达式js的属性"图像"



我正在用express和mongodb构建一个cart。然而,当我试图将图像类别添加到表单时,我遇到了一个错误;post-admin_product.js 代码

router.post('/add-product', function (req, res) {
var imageFile = typeof req.files.image !== "undefined" ? req.files.image.name: "";
req.checkBody('title', 'Title must have a value.').notEmpty();
req.checkBody('desc', 'Description must have a value.').notEmpty();
req.checkBody('price', 'Price must have a value.').isDecimal();
req.checkBody('image', 'You must upload an image').isImage(imageFile);
var title = req.body.title;
var slug = title.replace(/s+/g, '-').toLowerCase();
var desc = req.body.desc;
var price = req.body.price;
var category = req.body.category;
var errors = req.validationErrors();
if (errors) {
Category.find(function (err, categories) {
res.render('admin/add_product', {
errors: errors,
title: title,
desc: desc,
categories: categories,
price: price
});
});
} else {
Product.findOne({slug: slug}, function (err, product) {
if (product) {
req.flash('danger', 'Product title exists, choose another.');
Category.find(function (err, categories) {
res.render('admin/add_product', {
title: title,
desc: desc,
categories: categories,
price: price
});
});
} else {
var price2 = parseFloat(price).toFixed(2);
var product = new Product({
title: title,
slug: slug,
desc: desc,
price: price2,
category: category,
image: imageFile
});
product.save(function (err) {
if (err)
return console.log(err);
mkdirp('public/product_images/' + product._id, function (err) {
return console.log(err);
});
mkdirp('public/product_images/' + product._id + '/gallery', function (err) {
return console.log(err);
});
mkdirp('public/product_images/' + product._id + '/gallery/thumbs', function (err) {
return console.log(err);
});
if (imageFile != "") {
var productImage = req.files.image;
var path = 'public/product_images/' + product._id + '/' + imageFile;
productImage.mv(path, function (err) {
return console.log(err);
});
}
req.flash('success', 'Product added!');
res.redirect('/admin/products');
});
}
});
}
});

当我在没有上传图像的情况下提交表单时出现错误:TypeError: Cannot read property 'image' of null

根据错误陈述,问题似乎在这一行var imageFile = typeof req.files.image !== "undefined" ? req.files.image.name: "";

.ejs:

<input type="text" class = "form-control" name ="title" value = "<%= title%>" placeholder =  "Title">
</div>
<div class = "form-group">
<label for="">Description</label>
<textarea name="desc" id = "ta" class="form-control" cols="30" rows="10" placeholder="Description"><%= desc %></textarea>
</div>

<div class="form-group">
<label for="">Category</label>
<select name="category" class="form-control">
<% catagories.forEach(function(cat){ %>
<option value="<%= cat.slug %>"><%= cat.title %></option>
<% }); %>
</select>
</div>

app.js:

const pages = require('./routes/pages.js');
const adminPages = require('./routes/admin_pages.js');
const adminCatagories = require('./routes/admin_catagories.js');
const adminProducts = require('./routes/admin_products.js');
app.use('/', pages);
app.use('/admin/pages', adminPages);
app.use('/admin/catagories', adminCatagories);
app.use('/admin/products', adminProducts);

我在一个教程中看到了完全相同的代码运行得很好,但不知怎么的,我自己没有把它做好

通过if-else语句解决了这个问题。而不是这个

var imageFile = typeof(req.files.image) !== "undefined" ? req.files.image.name : "";

我写的是:

if (!req.files) { 
imageFile =""; }
if (req.files) {
var imageFile = typeof(req.files.image) !== "undefined" ? req.files.image.name : "";}

它工作得很好。希望它也能帮助其他人

最新更新