当前位置:首页 > 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示例处理动态发布请求

vue发布动态功能实现

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动态数据模型设计

vue发布动态功能实现

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中实现倍速播放功能通常涉及HTML5的<video>元素或第三方播放器库(如video.js)的API调用。以下是具体实现方式: 使用原生HTML5 vi…

vue实现tab功能

vue实现tab功能

Vue实现Tab功能的方法 使用动态组件和v-for指令 在Vue中实现Tab功能可以通过动态组件和v-for指令结合完成。定义一个包含tab标题和对应内容的数组,使用v-for渲染tab标题,并通过…

vue实现功能列表

vue实现功能列表

Vue 实现功能列表的方法 在 Vue 中实现功能列表通常涉及数据绑定、列表渲染、事件处理和状态管理。以下是几种常见的方法: 数据驱动列表渲染 使用 v-for 指令可以轻松实现列表渲染。假设有一个…

vue实现app功能

vue实现app功能

Vue 实现 App 功能的常见方法 使用 Capacitor 或 Cordova 进行混合开发 Vue 结合 Capacitor 或 Cordova 可以将 Web 应用打包成原生 App。Capa…

php购物车功能的实现

php购物车功能的实现

实现购物车功能的基本方法 使用PHP实现购物车功能可以通过会话(Session)或数据库存储购物车数据。以下是两种常见方法的详细说明。 使用Session存储购物车数据 PHP的$_SESSION…

vue 分页功能实现

vue 分页功能实现

分页功能实现方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,可以快速实现分页功能。 安装 Element UI: npm…