首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mean :如何使用nodejs高速公路和角度6在mongodb中存储图像?

Mean :如何使用nodejs高速公路和角度6在mongodb中存储图像?
EN

Stack Overflow用户
提问于 2018-07-19 14:18:51
回答 1查看 707关注 0票数 0

我正在构建一个MEAN应用程序,试图将产品映像存储在mongodb中,但是出现了一些错误

typeError: cannot read the property 'productimage' of undefined

这是添加产品的路由函数。

代码语言:javascript
运行
复制
function addProduct(req, res, next){
    var newProduct = new Product({
        productName: req.body.productname,
        productCategory: req.body.productcategory,
        productDescription: req.body.productdescription,
        productPrice: req.body.productprice
        });
    
    newProduct.productImage.data = fs.readFileSync(req.file.productimage);
    newProduct.productImage.contentType = 'jpg';
    
     newProduct.save(function(err){
            if(err){ 
                console.log("error saving product");
                res.status(400).json({ 
                    success: false, 
                    message:'Error processing request '+ err});
        }
        else{
            console.log("product inserted");
            res.status(201).json({
                success: true,
		message: 'Product added successfully.'
        });
    }
    });
}
module.exports = {addProduct);

这是产品型号。

代码语言:javascript
运行
复制
const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const productSchema = new Schema({
  productname : { type: String },
  productCategory: { type: String },
  productDescription: { type: String },
  productImage: { data: Buffer, contentType: String },
  productPrice: { type: Number }
});

module.exports = mongoose.model('product', productSchema, 'products');

这是html文件。

代码语言:javascript
运行
复制
<form class="form-style-9" 
       [formGroup]="productForm"
      (ngSubmit)="addProduct(productForm.value)"
      enctype="multipart/form-data"
      >
    <ul>
        <li><span>Product Name</span>
            <input type="text" name="productname" class="field-style field-full align-none" placeholder="Name" formControlName="productname" />
        </li>
        <span>Product Category</span><br>
        <select formControlName="productcategory">
          <option value="Clothing">Clothing</option>
          <option value="Electronics">Electronics</option>
          <option value="Books">Books</option>
          <option value="Toys">Toys</option>
        </select>
        <li><span>Product Description</span>
            <textarea name="productdescription" class="field-style" placeholder="Product Description" formControlName="productdescription"></textarea>
        </li>
        <li><span>Product Image</span>
            <input type="file" name="productimage" class="field-style field-full align-none" placeholder="Image" formControlName="productimage"/>
        </li>
        <li><span>Product Price</span>
            <input type="number" name="productprice" class="field-style field-full align-none" placeholder="Product Price" formControlName="productprice" />
        </li>
        <li>
        <input type="submit" value="Add Product" />
        </li>
    </ul>
</form>

这是组件文件

代码语言:javascript
运行
复制
export class ProductComponent implements OnInit {

  constructor(private fb: FormBuilder, 
    private router: Router,
    private productService: ProductService,
    private toastr: ToastrService) { }
  
  ngOnInit() {
  }
  
  productName = new FormControl("");
  productCategory = new FormControl("");
  productDescription = new FormControl("");
  productImage = new FormControl("");
  productPrice = new FormControl("");
  
  
  productForm: FormGroup = this.fb.group({
    'productname': this.productName,
    'productcategory': this.productCategory,
    'productdescription': this.productDescription,
    'productimage': this.productImage,
    'productprice': this.productPrice,
  });
  
  addProduct(formdata:any) {
      this.productService.addProduct(this.productForm.value)
      .subscribe(data => {
          if (data.success === false) {
            this.toastr.error(data.message);
          } else {
            this.toastr.success(data.message);
            this.router.navigate([' ']);
          }
          this.productForm.reset();
      });
    }
  
}

我试过使用multer,但我认为它不起作用,或者可能是我把它编码错了。请纠正我做错了什么。

我创建了一个用于存储图像server/public/images的不同文件夹,这个文件夹包含server/models/server/routes/的路由和模型。

这是服务器文件。

代码语言:javascript
运行
复制
var multer = require('multer');

var app = express();

var api = require('./server/routes/api');
var image = multer({ dest:'./server/public/' });

app.post('/product', image.single('images'), api.addProduct);

我在这里做错什么了?

EN

回答 1

Stack Overflow用户

发布于 2018-07-19 14:38:28

我觉得你的穆特配置有问题。您能分享您的需求和穆特中间件以及。

此外,我还包括下面的示例配置,以配置您的multer中间件。

代码语言:javascript
运行
复制
const multer = require('multer')

var storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, './path/to/file')
  },
  filename: (req, file, cb) => {
    cb(null, "PDFS-"+file.originalname.substring(0, file.originalname.lastIndexOf('.')) + '-' +   Date.now()+(path.extname(file.originalname)).toLowerCase())
  }
});
var upload = multer({
  storage: storage,
  fileFilter: function (req, file, callback) {
    var ext = (path.extname(file.originalname)).toLowerCase();
    if(ext !== '.pdf') {
        return callback(new Error('Only pdf format files are allowed!'))
    }
    callback(null, true)
  },
  limits:{
      fileSize: 1024*1024
  }
});

app.post('/upload', function(req, res, next){
    upload.single('productimage')(req, res, function (err) {
        if (err) {
          console.log("upload err"+err);
          res.render('upload');
          return;
        }
        else{
        if (req.file===undefined) {
        console.log("empty");
        res.render('upload');
        } 
        else{
          console.log("done");
          res.render('upload');
        }
       }
      });
    });

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51425042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档