当前位置:首页 > 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组件展示动态列表

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中可以通过组件化设计、状态管理库(如Vuex或Pinia)和后端API配合实现。 审核状态管理 使用Vuex或Pinia存…

vue实现微博发布动态

vue实现微博发布动态

Vue 实现微博发布动态功能 数据绑定与表单设计 使用 Vue 的 v-model 实现表单双向绑定,创建动态内容输入框和图片上传组件。示例代码: <template> <di…

elementui动态

elementui动态

ElementUI 动态组件与数据绑定 ElementUI 支持动态渲染组件和数据绑定,常用于表格、表单等场景的动态生成。通过 v-for 和动态属性绑定实现组件灵活配置。 动态生成表格列 <…

vue实现答题功能

vue实现答题功能

Vue实现答题功能 数据准备 创建一个包含题目、选项和正确答案的数据结构,通常是一个数组对象。每个题目对象包含问题文本、选项数组和正确答案索引。 const questions = [ {…

vue动态组件实现

vue动态组件实现

动态组件的基本用法 在Vue中,动态组件通过<component>标签和is属性实现。is属性可以绑定组件名称或组件选项对象,实现动态切换。 <template> <…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…