当前位置:首页 > VUE

vue发布动态功能实现

2026-01-07 04:35:01VUE

实现Vue动态发布功能

前端实现

使用Vue.js构建动态发布表单,包含文本输入和图片上传功能

<template>
  <div>
    <textarea v-model="content" placeholder="分享你的想法..."></textarea>
    <input type="file" @change="handleFileUpload" accept="image/*">
    <button @click="postDynamic">发布</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: '',
      images: []
    }
  },
  methods: {
    handleFileUpload(e) {
      this.images = Array.from(e.target.files)
    },
    async postDynamic() {
      const formData = new FormData()
      formData.append('content', this.content)
      this.images.forEach(img => {
        formData.append('images', img)
      })

      try {
        await axios.post('/api/dynamics', formData)
        this.$emit('posted')
        this.content = ''
        this.images = []
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

后端API设计

Node.js Express示例处理动态发布请求

const express = require('express')
const multer = require('multer')
const upload = multer({ dest: 'uploads/' })

router.post('/dynamics', upload.array('images'), async (req, res) => {
  try {
    const { content } = req.body
    const images = req.files.map(file => file.path)

    const newDynamic = new Dynamic({
      content,
      images,
      author: req.user.id
    })

    await newDynamic.save()
    res.status(201).json(newDynamic)
  } catch (error) {
    res.status(500).json({ error: error.message })
  }
})

数据库模型

MongoDB动态数据模型设计

const mongoose = require('mongoose')

const dynamicSchema = new mongoose.Schema({
  content: String,
  images: [String],
  author: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  },
  likes: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }],
  comments: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Comment'
  }],
  createdAt: {
    type: Date,
    default: Date.now
  }
})

module.exports = mongoose.model('Dynamic', dynamicSchema)

图片处理

使用Sharp库进行图片优化处理

const sharp = require('sharp')

async function processImage(file) {
  const filename = `${Date.now()}.webp`
  await sharp(file.path)
    .resize(800, 800, { fit: 'inside' })
    .webp({ quality: 80 })
    .toFile(`public/uploads/${filename}`)
  return `/uploads/${filename}`
}

前端展示动态列表

Vue组件展示动态列表

<template>
  <div v-for="dynamic in dynamics" :key="dynamic._id">
    <p>{{ dynamic.content }}</p>
    <div v-for="img in dynamic.images" :key="img">
      <img :src="img" alt="动态图片">
    </div>
    <button @click="likeDynamic(dynamic._id)">点赞</button>
  </div>
</template>

<script>
export default {
  props: ['dynamics'],
  methods: {
    async likeDynamic(id) {
      await axios.post(`/api/dynamics/${id}/like`)
      this.$emit('liked')
    }
  }
}
</script>

vue发布动态功能实现

标签: 功能动态
分享给朋友:

相关文章

vue实现倒计时功能

vue实现倒计时功能

实现倒计时功能的方法 在Vue中实现倒计时功能可以通过多种方式,以下是几种常见的方法: 使用setInterval和clearInterval 通过JavaScript的setInterval和cl…

vue实现动态显示布局

vue实现动态显示布局

Vue 动态显示布局的实现方法 使用 v-if 和 v-show 控制元素显示 v-if 和 v-show 是 Vue 中常用的指令,用于动态控制元素的显示和隐藏。v-if 是条件渲染,当条件为 fa…

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-mode…

vue实现tab功能

vue实现tab功能

Vue 实现 Tab 功能的方法 使用动态组件和 v-if 指令 通过 v-if 或 v-show 控制不同 Tab 内容的显示与隐藏。这种方法适合简单的 Tab 切换需求。 <templa…

vue修改功能实现

vue修改功能实现

Vue 修改功能的实现方法 在 Vue 中实现修改功能通常涉及表单绑定、数据更新和事件处理。以下是几种常见的实现方式: 数据双向绑定 使用 v-model 指令实现表单元素与 Vue 实例数据的双向…

vue动态组件实现

vue动态组件实现

Vue 动态组件实现方法 使用 component 标签与 is 属性 通过 Vue 内置的 <component> 标签和 is 属性实现动态组件切换。is 的值可以是已注册的组件名或导…