webpack4+express+mongodb+vue实现增删改查的示例

下面我将详细讲解“webpack4+express+mongodb+vue实现增删改查的示例”的完整攻略。

搭建前端页面

首先,我们需要搭建前端页面,使用 Vue.js 框架实现。在命令行中执行以下命令:

vue init webpack vue-test
cd vue-test
npm install

然后,安装并添加 vue-route 和 axios 依赖,在 src/main.js 文件中添加以下代码:

import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import VueRouter from 'vue-router'
import App from './App.vue'
import Add from './components/Add.vue'
import List from './components/List.vue'
import Edit from './components/Edit.vue'

Vue.use(VueRouter)
Vue.use(VueAxios, axios)

Vue.config.productionTip = false

const routes = [
  { path: '/', redirect: '/list' },
  { path: '/list', component: List },
  { path: '/add', component: Add },
  { path: '/edit/:id', component: Edit }
]

const router = new VueRouter({
  routes
})

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

src/components 目录下新建 Add.vueList.vueEdit.vue 三个文件,分别实现添加数据、展示数据和修改数据功能。

配置后端服务器

然后,我们需要搭建一个后端服务器,使用 Express.js 框架实现。在命令行中执行以下命令:

mkdir backend
cd backend
npm init
npm install express mongoose body-parser cors --save

backend 文件夹下新建 server.js,添加以下代码:

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const mongoose = require('mongoose')
const app = express()
const port = process.env.PORT || 3000

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(cors())

mongoose.connect('mongodb://localhost:27017/vue-test')

const db = mongoose.connection
db.on('error', console.error.bind(console, 'connection error:'))
db.once('open', function() {
  console.log('database open successful.')
})

const TodoSchema = mongoose.Schema({
  name: String,
  date: Date,
  content: String
})

const TodoModel = mongoose.model('Todo', TodoSchema)

app.get('/todo', (req, res) => {
  TodoModel.find((err, data) => {
    if (err) console.log(err)
    res.send(data)
  })
})

app.post('/todo', (req, res) => {
  let newTodo = new TodoModel(req.body)
  newTodo.save((err, data) => {
    if (err) console.log(err)
    res.send(data)
  })
})

app.put('/todo/:id', (req, res) => {
  TodoModel.findByIdAndUpdate(req.params.id, req.body, (err, data) => {
    if (err) console.log(err)
    res.send(data)
  })
})

app.delete('/todo/:id', (req, res) => {
  TodoModel.findByIdAndDelete(req.params.id, (err, data) => {
    if (err) console.log(err)
    res.send(data)
  })
})

app.listen(port, () => {
  console.log(`server is running at http://localhost:${port}/`)
})

这是一个简单的 Express.js 服务器,通过 Mongoose 操作 MongoDB 数据库。

整合前后端

最后,我们需要把前端和后端整合起来。在 vue-test 目录下执行以下命令:

npm install webpack-node-externals copy-webpack-plugin html-webpack-plugin webpack-merge nodemon --save-dev

vue-test 目录下新建 webpack.config.js,添加以下代码:

const path = require('path')
const nodeExternals = require('webpack-node-externals')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { merge } = require('webpack-merge')
const isProd = process.env.NODE_ENV === 'production'

let webpackConfig = {
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: '[name].js'
  },
  mode: isProd ? 'production' : 'development',
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'img/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: 'fonts/[name].[hash:7].[ext]'
        }
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'index.html',
      inject: true
    }),
    new CopyWebpackPlugin({
      patterns: [
        {
          from: path.resolve(__dirname, './static'),
          to: path.resolve(__dirname, './dist/static'),
          globOptions: {
            ignore: ['.*']
          }
        }
      ]
    })
  ]
}

let serverConfig = {
  target: 'node',
  entry: './backend/server.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: 'server.js'
  },
  devtool: 'source-map',
  externals: [nodeExternals()],
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      }]
  }
}

module.exports = [merge(webpackConfig, {
  entry: './src/main.js',
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          'css-loader'
        ]
      }
    ]
  }
}), serverConfig]

这是一个简单的 webpack 配置,用于打包前端页面和后端服务器代码。在 vue-test 目录下新建 .babelrc 文件,添加以下代码:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

此外,我们还需要在 package.json 文件中添加以下代码:

"scripts": {
  "dev": "nodemon dist/server.js",
  "build": "webpack -p"
}

这些代码的作用是启动服务器和打包项目。

完成以上步骤后,我们就可以通过以下命令运行项目:

npm run build
npm run dev

然后在浏览器中访问 http://localhost:3000,就可以看到我们实现的增删改查功能了。

示例说明

示例一:添加数据

Add.vue 文件中,我们可以看到以下代码:

<template>
  <div class="add-container">
    <h2>Add Todo</h2>
    <form>
      <input type="text" v-model="name" placeholder="Name">
      <input type="text" v-model="content" placeholder="Content">
      <button type="submit" @click.prevent="addTodo">Submit</button>
    </form>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        name: '',
        content: ''
      }
    },
    methods: {
      addTodo () {
        let date = new Date()
        let todo = {
          name: this.name,
          content: this.content,
          date: date
        }
        this.axios.post('/todo', todo).then(res => {
          console.log(res.data)
          this.$router.replace('/list')
        })
      }
    }
  }
</script>

这段代码实现了向数据库中添加一条数据的功能。它通过 axios 发送一个 post 请求,把用户输入的数据提交到后端服务器的 /todo 路由,然后由后端把数据存入数据库。最后,页面跳转到展示数据的页面 /list

示例二:修改数据

Edit.vue 文件中,我们可以看到以下代码:

<template>
  <div class="edit-container">
    <h2>Edit Todo</h2>
    <form>
      <input type="text" v-model="todo.name" placeholder="Name">
      <input type="text" v-model="todo.content" placeholder="Content">
      <button type="submit" @click.prevent="updateTodo">Submit</button>
    </form>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        todo: {}
      }
    },
    created () {
      this.getTodo()
    },
    methods: {
      getTodo () {
        let id = this.$route.params.id
        this.axios.get(`/todo/${id}`).then(res => {
          console.log(res.data)
          this.todo = res.data
        })
      },
      updateTodo () {
        let id = this.$route.params.id
        this.axios.put(`/todo/${id}`, this.todo).then(res => {
          console.log(res.data)
          this.$router.replace('/list')
        })
      }
    }
  }
</script>

这段代码实现了修改数据库中一条数据的功能。它通过 axios 发送一个 put 请求,把用户修改的数据提交到后端服务器的 /todo/:id 路由,然后由后端把数据更新到数据库中。最后,页面跳转到展示数据的页面 /list

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:webpack4+express+mongodb+vue实现增删改查的示例 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Windows server 2008 R2(win7)登陆sqlplus错误ORA-12560和ORA-12557的解决方法

    下面是针对“Windows server 2008 R2(win7)登陆sqlplus错误ORA-12560和ORA-12557的解决方法”的完整攻略: 问题描述 在 Windows server 2008 R2 或 win7 操作系统下连接 Oracle 数据库时,可能会出现 ORA-12560 或 ORA-12557 错误。 ORA-12560:TNS …

    database 2023年5月21日
    00
  • SQL Server 的T-SQL高级查询详解

    SQL Server 的T-SQL高级查询详解 T-SQL(Transact-SQL)是SQL Server中的一种编程语言,它可以让我们编写更加复杂、精细的查询语句,提高数据库查询、更新、删除等操作的效率和灵活性。本文将详细讲解SQL Server的T-SQL高级查询技巧,包括子查询、联接查询、聚合函数、分组查询、常见的窗口函数等内容。 子查询 子查询是指…

    database 2023年5月21日
    00
  • ubuntu下在docker中安装mysql5.6 的方法

    下面是在Ubuntu下使用Docker安装MySQL 5.6的攻略: 安装Docker 首先需要安装Docker,可以执行以下命令安装: sudo apt-get update sudo apt-get install docker.io 获取MySQL 5.6的镜像 使用下面的命令从Docker Hub获取MySQL 5.6的镜像: sudo docker…

    database 2023年5月22日
    00
  • MySQL创建带特殊字符的数据库名称方法示例

    当需要创建一个包含特殊字符的MySQL数据库名时,需要注意以下几点: MySQL数据库名可以使用字母、数字、下划线和美元符号。除此之外的字符都被认为是特殊字符,需要使用特殊的语法或转义符号来表示。 为方便起见,最好使用转义符号来表示特殊字符,MySQL中使用反斜线“\”作为转义符号,即在特殊字符前加上“\”以将其转换为普通字符。 下面是一个示例,我们将创建一…

    database 2023年5月18日
    00
  • MySQL创建数据表并建立主外键关系详解

    下面是”MySQL 创建数据表并建立主外键关系详解”的完整攻略及示例。 MySQL 创建数据表并建立主外键关系详解 1. 创建数据表 MySQL 是一种用于管理关系型数据库的开源数据库管理系统。下面我们来看看如何创建数据表。 1.1 创建数据表语法 创建数据表需要使用 MySQL 的 CREATE TABLE 命令,语法如下: CREATE TABLE ta…

    database 2023年5月22日
    00
  • 在Redhat9上安装Oracle 9.2

    下面是详细的Redhat9上安装Oracle 9.2的攻略: 准备工作 系统需求 Red Hat Linux Advanced Server 2.1, 3.0,或 Red Hat Enterprise Linux AS 3.0 具备 256MB 的内存,并保留 384MB 的虚拟内存空间 必须拥有 root 权限 软件需求 Oracle 9.2 安装程序 R…

    database 2023年5月22日
    00
  • SpringBoot如何整合redis实现过期key监听事件

    整合Redis实现过期key监听事件是SpringBoot常见的功能之一。下面我将详细讲解如何实现这一功能。 1. 添加Redis和Lettuce依赖 首先,我们需要在pom.xml文件中配置Redis和Lettuce的依赖。 <dependencies> <dependency> <groupId>org.springf…

    database 2023年5月22日
    00
  • mysql 8.0.12 安装配置教程

    MySQL 8.0.12 安装配置教程 MySQL是一个流行的开源关系型数据库管理系统,本文将介绍如何在Windows环境下安装配置MySQL 8.0.12版本,提供全面的安装过程展示。 步骤一:下载MySQL 8.0.12 MySQL官网提供了多个版本的Windows安装程序,我们选择MySQL Community Server 8.0.12版本的Wind…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部