当前位置:首页 > VUE

vue实现发表博客

2026-02-17 16:59:26VUE

Vue 实现发表博客功能

前端部分(Vue.js)

安装必要依赖(如需要)

npm install axios vue-router

创建博客发布组件(BlogEditor.vue)

<template>
  <div class="blog-editor">
    <h3>发布新博客</h3>
    <form @submit.prevent="submitBlog">
      <div class="form-group">
        <label>标题</label>
        <input v-model="blog.title" type="text" required>
      </div>
      <div class="form-group">
        <label>内容</label>
        <textarea v-model="blog.content" rows="10" required></textarea>
      </div>
      <button type="submit">发布</button>
    </form>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      blog: {
        title: '',
        content: ''
      }
    }
  },
  methods: {
    async submitBlog() {
      try {
        const response = await axios.post('/api/blogs', this.blog);
        alert('博客发布成功');
        this.$router.push('/blogs');
      } catch (error) {
        console.error('发布失败:', error);
      }
    }
  }
}
</script>

配置路由(router/index.js)

import { createRouter, createWebHistory } from 'vue-router'
import BlogEditor from '../components/BlogEditor.vue'

const routes = [
  {
    path: '/blogs/new',
    component: BlogEditor
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

export default router

后端部分(Node.js示例)

安装必要依赖

npm install express body-parser cors

创建简单API服务(server.js)

vue实现发表博客

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');

const app = express();
app.use(bodyParser.json());
app.use(cors());

let blogs = [];

app.post('/api/blogs', (req, res) => {
  const newBlog = {
    id: Date.now(),
    title: req.body.title,
    content: req.body.content,
    createdAt: new Date()
  };
  blogs.push(newBlog);
  res.status(201).json(newBlog);
});

app.get('/api/blogs', (req, res) => {
  res.json(blogs);
});

const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

数据库集成(可选MongoDB)

安装Mongoose

npm install mongoose

修改server.js连接数据库

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/blogDB', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const blogSchema = new mongoose.Schema({
  title: String,
  content: String,
  createdAt: { type: Date, default: Date.now }
});

const Blog = mongoose.model('Blog', blogSchema);

app.post('/api/blogs', async (req, res) => {
  try {
    const blog = new Blog(req.body);
    await blog.save();
    res.status(201).json(blog);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

富文本编辑器集成(如需要)

安装vue-quill编辑器

vue实现发表博客

npm install vue-quill@beta @vueup/vue-quill@beta

修改BlogEditor.vue

<template>
  <div>
    <QuillEditor v-model:content="blog.content" contentType="html" />
  </div>
</template>

<script>
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css';

export default {
  components: { QuillEditor }
}
</script>

用户认证(可选)

添加登录验证中间件

// server.js
const authenticate = (req, res, next) => {
  if (!req.headers.authorization) {
    return res.status(401).json({ error: '未授权' });
  }
  next();
};

app.post('/api/blogs', authenticate, async (req, res) => {
  // 原有代码
});

前端添加Authorization头

// BlogEditor.vue
axios.post('/api/blogs', this.blog, {
  headers: {
    'Authorization': `Bearer ${localStorage.getItem('token')}`
  }
})

标签: 博客vue
分享给朋友:

相关文章

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDia…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click…

vue 实现权限

vue 实现权限

Vue 实现权限控制的方法 在 Vue 项目中实现权限控制通常涉及前端路由、组件和按钮级别的权限管理。以下是几种常见的实现方式: 路由权限控制 通过路由守卫实现权限验证,过滤用户无权访问的路由:…

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:…