Golang Beego与Vue.JS入门开发套件指南

Golang Beego与Vue.JS入门开发套件指南 大家好,

我在7个月前创建了一个新的入门套件,将Beego框架与Vue.JS、Webpack、Sass以及更多客户端酷炫技术相结合。

我在Medium上写了一篇短文:

Medium图标 Medium – 2018年7月25日

文章缩略图

Beego框架入门套件 – bnsd55 – Medium

我使用Go语言编写了一个简单的入门套件,适用于初学者,包含Beego、Webpack、Sass、Vue.js、Vuex(状态管理器)、Buefy(轻量级UI…

阅读时间:1分钟

Git仓库:

GitHub图标 GitHub

用户头像

bnsd55/beego-vuejs-starter-kit

beego-vuejs-starter-kit - Beego (GOLANG), Webpack, Sass, Vue.js, Vuex, Buefy

请告诉我您的批评意见,以及我如何改进代码以帮助他人 🙂


更多关于Golang Beego与Vue.JS入门开发套件指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Beego与Vue.JS入门开发套件指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢分享这个结合Beego和Vue.js的入门套件!这是一个非常实用的全栈开发示例,对于想要快速上手Go后端和现代前端技术的开发者很有帮助。以下是一些技术层面的反馈和代码示例,供您参考:

项目结构优化

当前项目可能将前端和后端代码混合在一起。建议采用更清晰的分层结构,例如:

project-root/
├── backend/          # Beego后端代码
│   ├── controllers/
│   ├── models/
│   ├── routers/
│   └── main.go
├── frontend/         # Vue.js前端代码
│   ├── src/
│   ├── public/
│   └── package.json
└── README.md

Beego后端代码示例

在Beego控制器中,可以添加更完整的RESTful API示例:

// controllers/user_controller.go
package controllers

import (
	"github.com/astaxie/beego"
	"myapp/models"
)

type UserController struct {
	beego.Controller
}

// @Title GetUser
// @Description Get user by ID
// @Param   userId     path    int     true        "User ID"
// @Success 200 {object} models.User
// @Failure 404 user not found
// @router /:userId [get]
func (c *UserController) GetUser() {
	userId, _ := c.GetInt(":userId")
	user, err := models.GetUserById(userId)
	if err != nil {
		c.Ctx.Output.SetStatus(404)
		c.Data["json"] = map[string]string{"error": "User not found"}
	} else {
		c.Data["json"] = user
	}
	c.ServeJSON()
}

// @Title CreateUser
// @Description Create new user
// @Param   body    body    models.User   true    "User data"
// @Success 201 {object} models.User
// @Failure 400 invalid input
// @router / [post]
func (c *UserController) CreateUser() {
	var user models.User
	if err := c.ParseForm(&user); err != nil {
		c.Ctx.Output.SetStatus(400)
		c.Data["json"] = map[string]string{"error": "Invalid input"}
	} else {
		id, err := models.AddUser(&user)
		if err != nil {
			c.Ctx.Output.SetStatus(500)
			c.Data["json"] = map[string]string{"error": "Internal server error"}
		} else {
			c.Ctx.Output.SetStatus(201)
			user.Id = id
			c.Data["json"] = user
		}
	}
	c.ServeJSON()
}

前端集成改进

在Vue.js组件中,可以添加更完善的API调用示例:

// frontend/src/services/api.js
import axios from 'axios'

const API_BASE = 'http://localhost:8080/api/v1'

export default {
  getUser(userId) {
    return axios.get(`${API_BASE}/user/${userId}`)
      .then(response => response.data)
      .catch(error => {
        console.error('Error fetching user:', error)
        throw error
      })
  },
  
  createUser(userData) {
    return axios.post(`${API_BASE}/user`, userData)
      .then(response => response.data)
      .catch(error => {
        console.error('Error creating user:', error)
        throw error
      })
  }
}
<!-- frontend/src/components/UserProfile.vue -->
<template>
  <div class="user-profile">
    <b-field label="Name">
      <b-input v-model="user.name" placeholder="Enter name"></b-input>
    </b-field>
    <b-field label="Email">
      <b-input v-model="user.email" type="email" placeholder="Enter email"></b-input>
    </b-field>
    <b-button type="is-primary" @click="saveUser">Save</b-button>
  </div>
</template>

<script>
import api from '@/services/api'

export default {
  data() {
    return {
      user: {
        name: '',
        email: ''
      }
    }
  },
  methods: {
    async saveUser() {
      try {
        const savedUser = await api.createUser(this.user)
        this.$buefy.toast.open({
          message: 'User created successfully!',
          type: 'is-success'
        })
        this.$emit('user-created', savedUser)
      } catch (error) {
        this.$buefy.toast.open({
          message: 'Error creating user',
          type: 'is-danger'
        })
      }
    }
  }
}
</script>

构建配置优化

在Webpack配置中,可以添加更详细的生产环境优化:

// webpack.config.js
const path = require('path')
const { VueLoaderPlugin } = require('vue-loader')

module.exports = {
  mode: process.env.NODE_ENV || 'development',
  entry: './frontend/src/main.js',
  output: {
    path: path.resolve(__dirname, 'backend/static'),
    filename: 'js/[name].[contenthash].js',
    publicPath: '/static/'
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: 'babel-loader'
      },
      {
        test: /\.scss$/,
        use: [
          'vue-style-loader',
          'css-loader',
          'sass-loader'
        ]
      }
    ]
  },
  plugins: [
    new VueLoaderPlugin()
  ],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'frontend/src')
    },
    extensions: ['.js', '.vue', '.json']
  }
}

环境配置

添加环境配置文件示例:

// backend/conf/app.conf
appname = myapp
httpport = 8080
runmode = dev

# Database
dbhost = localhost
dbport = 3306
dbuser = root
dbpassword = 
dbname = myapp

# CORS
enablecors = true

这些改进可以让项目结构更清晰,代码更易于维护,同时提供更完整的开发示例。您的入门套件已经是一个很好的起点,这些建议可以帮助它变得更加专业和完善。

回到顶部