当前位置:首页 > 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实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="we…

vue实现拨号功能

vue实现拨号功能

Vue实现拨号功能的方法 使用HTML5的tel协议 在Vue模板中直接使用<a>标签的tel:协议实现拨号功能。这种方法适用于移动端浏览器,点击后会调起系统的拨号界面。 <tem…

vue修改功能实现

vue修改功能实现

Vue 修改功能的实现方法 修改功能是 CRUD 操作中的重要部分,在 Vue 中可以通过多种方式实现。以下是几种常见的实现方案: 数据绑定与表单处理 使用 v-model 实现双向数据绑定,快速获…

php购物车功能的实现

php购物车功能的实现

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

vue实现数据动态

vue实现数据动态

Vue 实现数据动态绑定的方法 Vue.js 的核心特性之一是数据绑定,通过响应式系统实现数据的动态更新。以下是几种常见的实现方式: 双向数据绑定(v-model) 使用 v-model 指令可以实…

vue图片实现功能

vue图片实现功能

图片上传功能实现 使用 <input type="file"> 结合 Vue 的 v-on:change 事件监听文件选择 <template> <input ty…