Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解

标题:Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解

介绍

本文将详细介绍如何使用Vue、Node.js和MongoDB实现一款图片上传组件,该组件可以实现图片预览和删除功能。本文包含两个示例,分别介绍使用全局注册和局部注册组件的实现方法。

示例一:全局注册组件

第一步:创建项目

创建一个Vue项目,使用Vue CLI工具进行创建。

vue create vue-image-upload

第二步:创建组件

在src/components目录下创建一个名为ImageUpload.vue的组件。该组件实现了图片上传和预览功能,代码如下:

<template>
  <div>
    <input type="file" ref="fileInput" @change="onFileChange" style="display: none;">
    <button @click="upload">上传图片</button>
    <div>
      <img v-for="(image, index) in images" :src="image.url" :key="index" style="width: 200px;">
      <button @click="deleteImage(index)">删除图片</button>
    </div>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  data() {
    return {
      images: []
    }
  },
  methods: {
    onFileChange() {
      let files = this.$refs.fileInput.files
      if (!files.length) {
        return
      }
      this.createImage(files)
    },
    createImage(files) {
      let formData = new FormData()
      formData.append('image', files[0])
      axios.post('http://localhost:3000/images/upload', formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      })
        .then(response => {
          console.log(response)
          this.images.push(response.data)
        })
        .catch(error => {
          console.log(error)
        })
    },
    deleteImage(index) {
      axios.delete(`http://localhost:3000/images/delete/${this.images[index]._id}`)
        .then(response => {
          console.log(response)
          this.images.splice(index, 1)
        })
        .catch(error => {
          console.log(error)
        })
    },
    upload() {
      this.$refs.fileInput.click()
    }
  }
}
</script>

<style scoped>

</style>

第三步:创建Node.js后端

在项目根目录下创建一个名为server.js的文件,用于启动Node.js服务。代码如下:

const express = require('express')
const multer = require('multer')
const cors = require('cors')
const mongoose = require('mongoose')
const Image = require('./models/Image')

mongoose.connect('mongodb://localhost:27017/image_upload', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
  .then(() => console.log('Mongoose connected'))
  .catch(err => console.log(err))

const app = express()

app.use(cors())
app.use(express.static('public'))

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'public/uploads')
  },
  filename: (req, file, cb) => {
    cb(null, file.originalname)
  }
})

const upload = multer({ storage }).single('image')

app.post('/images/upload', (req, res) => {
  upload(req, res, (err) => {
    if (err) {
      console.log(err)
      return res.sendStatus(500)
    }
    const image = new Image({
      url: `http://localhost:3000/uploads/${req.file.originalname}`
    })
    image.save()
      .then(() => res.json(image))
      .catch(err => {
        console.log(err)
        res.sendStatus(500)
      })
  })
})

app.delete('/images/delete/:id', (req, res) => {
  const id = req.params.id
  Image.findOneAndDelete({ _id: id })
    .then(() => res.sendStatus(200))
    .catch(() => res.sendStatus(500))
})

app.listen(3000, () => console.log('Server started'))

第四步:创建数据库schema

创建一个名为models/Image.js的文件,用于定义数据库的schema。代码如下:

const mongoose = require('mongoose')

const imageSchema = new mongoose.Schema({
  url: String
})

module.exports = mongoose.model('Image', imageSchema)

第五步:引入组件

在App.vue文件中引入组件,代码如下:

<template>
  <div id="app">
    <ImageUpload />
  </div>
</template>

<script>
import ImageUpload from './components/ImageUpload.vue'

export default {
  name: 'app',
  components: {
    ImageUpload
  }
}
</script>

<style>
</style>

第六步:启动项目

使用以下命令,启动项目:

npm run serve (运行前端)
node server.js (运行后端)

第七步:测试

打开浏览器,访问http://localhost:8080。上传一张图片,可以看到图片已经成功上传并预览。点击删除图片按钮,图片成功删除。

示例二:局部注册组件

本示例与示例一相同,只是使用了局部注册组件的方法。

第一步:创建项目

同示例一。

第二步:创建组件

同示例一。

第三步:创建Node.js后端

同示例一。

第四步:创建数据库schema

同示例一。

第五步:引入组件

在App.vue文件中引入组件,代码如下:

<template>
  <div id="app">
    <image-upload />
  </div>
</template>

<script>
import ImageUpload from './components/ImageUpload.vue'

export default {
  name: 'app',
  components: {
    'image-upload': ImageUpload
  }
}
</script>

<style>
</style>

第六步:启动项目

使用以下命令,启动项目:

npm run serve (运行前端)
node server.js (运行后端)

第七步:测试

同示例一。

总结

本文介绍了使用Vue、Node.js和MongoDB实现一款图片上传组件,该组件可以实现图片预览和删除功能。本文包含两个示例,分别介绍使用全局注册和局部注册组件的实现方法。该组件可以方便地应用于各种Vue项目中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • MongoDB实现自动备份的全过程记录

    MongoDB实现自动备份的全过程记录 为什么需要备份 在数据大规模存储的情况下,数据安全成为了一项无法忽视的问题。而备份则是解决数据安全的一个重要手段。在MongoDB中,备份数据可以用于在数据丢失或出现问题的情况下进行恢复。因此,MongoDB的备份是非常重要的。 MongoDB备份方法 MongoDB提供了多种备份方法,包括mongodump命令行工具…

    MongoDB 2023年5月16日
    00
  • MongoDB 学习笔记(一)-MongoDB配置

    我会给出完整的MongoDB配置攻略,并包含两个示例说明。 MongoDB 学习笔记(一)-MongoDB配置 简介 MongoDB是一种基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。 在这篇学习笔记中我们将学习如何配置MongoDB。我们将需要安装MongoDB、创建数据库目录以及启动MongoDB服务。…

    MongoDB 2023年5月16日
    00
  • MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解 MongoDB是一种使用BSON(一种类似于JSON的二进制数据格式)保存数据的非关系型数据库。它具有高度的灵活性和可伸缩性,并且提供了丰富的查询功能。 多条件查询 MongoDB支持多条件查询,这意味着开发人员可以同时使用多个查询条件来查找文档。 在MongoDB中,多条件查询需要使用$and和$or操作符。 $and操作…

    MongoDB 2023年5月16日
    00
  • PHP与MongoDB简介|安全|M+PHP应用实例详解

    PHP与MongoDB简介 PHP是一种在Web开发领域应用广泛的编程语言,其可以快速构建Web应用并提供强大的功能。而MongoDB则是一种广泛应用于各种应用场景的NoSQL数据库,其具有高性能、可伸缩、高可用等优点。 PHP与MongoDB的结合可以提供出色的性能和可伸缩性。PHP使用MongoDB的扩展程序可以轻松地通过PHP进行与MongoDB的交互…

    MongoDB 2023年5月16日
    00
  • php对mongodb的扩展(小试牛刀)

    下面是完整攻略。 PHP对MongoDB的扩展(小试牛刀) 介绍 MongoDB 是一个开源的文档型 NoSQL 数据库。它是一个面向文档存储的数据库,提供完整的文档存储和查询服务,支持动态查询等等。本文介绍了 PHP 对 MongoDB 的扩展,帮助你更好地使用 MongoDB。 安装 在开始使用 PHP 对 MongoDB 的扩展之前,需要先安装相应的 …

    MongoDB 2023年5月16日
    00
  • MongoDB中游标的深入学习

    下面详细讲解“MongoDB中游标的深入学习”的完整攻略: 标题 MongoDB中游标的深入学习 内容: MongoDB是一款非常流行的文档型数据库,而游标则是MongoDB中非常重要的概念之一。下面我们就来进行MongoDB中游标的深入学习。 游标基本知识 在MongoDB中,游标表示对查询结果的返回结果进行逐一访问的机制。MongoDB中可以通过游标实现…

    MongoDB 2023年5月16日
    00
  • SpringBoot配置MongoDB多数据源的方法步骤

    下面我会详细讲解Spring Boot配置MongoDB多数据源的方法步骤,为了更好的展示过程,我会包含两条示例说明。 Spring Boot配置MongoDB多数据源的方法步骤 步骤一:创建多个Mongo DB实例 为了配置MongoDB多数据源,我们需要首先创建多个MongoDB实例,可以通过MongoDB的配置文件mongodb.conf文件来完成。对…

    MongoDB 2023年5月16日
    00
  • MongoDB整合Spring实例详细讲解(含代码)

    下面我将为您详细讲解”MongoDB整合Spring实例详细讲解(含代码)”的攻略。 一、MongoDB整合Spring实例详细讲解 MongoDB是一款NoSQL数据库,相比传统关系型数据库,MongoDB更适合处理大规模、高并发的数据,而Spring是一款流行的Java框架,能够在Java应用程序开发中提供完整的开发体验。本例中详细介绍了如何使用Spri…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部