当前位置: 首页 > news >正文

基于Vue3和Node.js的完整增删改查项目实现教程:从后端封装到前端调用

在 Node.js 中封装一个增删改查(CRUD)接口,并在 Vue 3 前端调用这些接口。整个过程包括后端 API 的创建和前端的调用。

一、安装 Node.js 和 Express 脚手架

1. 安装 Node.js

首先,你需要安装 Node.js。你可以通过以下步骤进行安装:

  1. 访问 Node.js 官网。

  2. 根据你的操作系统选择适合的安装包,并安装。

在安装完成后,你可以通过以下命令检查是否安装成功:

node -v

如果成功安装,终端会显示 Node.js 的版本号。

2. 使用 Express 脚手架创建项目

接下来,我们将使用 Express 脚手架创建一个新的项目。

npx express-generator my-express-app
cd my-express-app
npm install

这会创建一个名为 my-express-app 的项目,并安装所有依赖。

二、搭建 MongoDB 数据库

1. 安装 MongoDB

首先,你需要安装 MongoDB。你可以通过以下步骤进行安装:

  1. 访问 MongoDB 官网。

  2. 根据你的操作系统选择适合的版本,并安装。

安装完成后,启动 MongoDB:

mongod --dbpath <your-data-path>

2. 连接 MongoDB 与 Node.js

my-express-app 目录中,我们需要安装 mongoose 以便与 MongoDB 交互:

npm install mongoose

接下来,在项目的 app.js 中添加以下代码,连接到 MongoDB:

const mongoose = require('mongoose');mongoose.connect('mongodb://localhost:27017/mydatabase', {useNewUrlParser: true,useUnifiedTopology: true,
});mongoose.connection.on('connected', () => {console.log('Connected to MongoDB');
});mongoose.connection.on('error', (err) => {console.log('Failed to connect to MongoDB', err);
});

三、封装 CRUD 操作

1. 创建 Mongoose 模型

在项目的 models 目录下创建一个 Item.js 文件,用于定义数据模型:

const mongoose = require('mongoose');const itemSchema = new mongoose.Schema({name: {type: String,required: true,},quantity: {type: Number,required: true,},
});module.exports = mongoose.model('Item', itemSchema);

2. 封装 CRUD 操作

routes 目录下创建一个 items.js 文件,用于处理增删改查请求:

const express = require('express');
const router = express.Router();
const Item = require('../models/Item');// Create an item
router.post('/items', async (req, res) => {try {const newItem = new Item(req.body);const savedItem = await newItem.save();res.status(201).json(savedItem);} catch (error) {res.status(400).json({ message: error.message });}
});// Get all items
router.get('/items', async (req, res) => {try {const items = await Item.find();res.json(items);} catch (error) {res.status(500).json({ message: error.message });}
});// Update an item
router.put('/items/:id', async (req, res) => {try {const updatedItem = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });res.json(updatedItem);} catch (error) {res.status(400).json({ message: error.message });}
});// Delete an item
router.delete('/items/:id', async (req, res) => {try {await Item.findByIdAndDelete(req.params.id);res.json({ message: 'Item deleted' });} catch (error) {res.status(500).json({ message: error.message });}
});module.exports = router;

然后在 app.js 中引入并使用这个路由:

const itemsRouter = require('./routes/items');
app.use('/api', itemsRouter);

四、前端:使用 Vue 3 实现接口调用

1. 创建 Vue 3 项目

首先,使用 Vue CLI 创建一个新的 Vue 3 项目:

npm install -g @vue/cli
vue create my-vue-app
cd my-vue-app

2. 创建 API 服务文件

src 目录下创建一个 api.js 文件,用于封装 API 请求:

import axios from 'axios';const apiClient = axios.create({baseURL: 'http://localhost:3000/api',headers: {'Content-Type': 'application/json',},
});export default {getItems() {return apiClient.get('/items');},createItem(item) {return apiClient.post('/items', item);},updateItem(id, item) {return apiClient.put(`/items/${id}`, item);},deleteItem(id) {return apiClient.delete(`/items/${id}`);},
};

3. 使用 setup 语法编写 Vue 组件

src/components 目录下创建一个 ItemList.vue 组件,用于展示和操作数据:

<template><div><h1>Item List</h1><ul><li v-for="item in items" :key="item._id">{{ item.name }} - {{ item.quantity }}<button @click="deleteItem(item._id)">Delete</button><button @click="editItem(item)">Edit</button></li></ul><div><input v-model="newItem.name" placeholder="Name" /><input v-model="newItem.quantity" type="number" placeholder="Quantity" /><button @click="addItem">Add Item</button></div></div>
</template><script setup>
import { ref, onMounted } from 'vue';
import api from '@/api';const items = ref([]);
const newItem = ref({name: '',quantity: null,
});const fetchItems = async () => {const response = await api.getItems();items.value = response.data;
};const addItem = async () => {const response = await api.createItem(newItem.value);items.value.push(response.data);newItem.value.name = '';newItem.value.quantity = null;
};const deleteItem = async (id) => {await api.deleteItem(id);items.value = items.value.filter(item => item._id !== id);
};const editItem = (item) => {newItem.value = { ...item };
};onMounted(() => {fetchItems();
});
</script>

4. 在 App.vue 中使用 ItemList.vue

修改 App.vue 来包含 ItemList.vue 组件:

<template><div id="app"><ItemList /></div>
</template><script setup>
import ItemList from './components/ItemList.vue';
</script>

5. 运行项目

确保你在运行后端的同时,在 my-vue-app 目录下运行前端项目:

npm run serve

现在,你应该可以在浏览器中访问 Vue 3 应用,并执行增删改查操作,这些操作将与后端的 Node.js 和 MongoDB 进行交互。

五、总结

这篇教程涵盖了以下内容:

  1. 如何安装和配置 Node.js 和 Express。

  2. 使用 Mongoose 连接和操作 MongoDB。

  3. 如何封装 CRUD 操作并与前端 Vue 3 结合。

  4. 使用 Vue 3 的 setup 语法糖编写组件,并通过 Axios 调用后端 API。

标题可以是: 《基于 Vue 3 和 Express 的完整增删改查项目实现:从后端封装到前端调用》

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Go - 每日一小问: 对未初始化的的 chan 进行读写,会怎么样?为什么?】
  • Android笔试面试题AI答之Kotlin常见考点总结
  • 【Android】Navigation动态设置Graph和Launch参数
  • Qt详解QPropertyAnimation创建属性动画
  • SQLserver中的日期时间
  • 牛津大学发布首篇《Transformer多模态学习》综述论文,23页pdf涵盖310篇文献全面阐述MMT的理论与应用
  • 智能废弃瓶子垃圾箱:城市环境的绿色守护者
  • javascript语句之switch
  • 鸿蒙(API 12 Beta3版)【使用ImagePacker完成图片编码】图片开发指导
  • Prompt + 工作流组件 = AI智能体:开启智能化新时代
  • SBB | 南京林业大学阮宏华团队揭示人工林发育过程中土壤有机碳积累的主要机制
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(十四)
  • 若依权限控制前端+后端实现思路梳理(PreAuthorize、hasPermi、v-hasPermi)
  • vivo手机短信删除了怎么恢复?恢复办法分享
  • Java 中的抽象工厂模式:优雅地掌握对象创建
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Cumulo 的 ClojureScript 模块已经成型
  • Javascript编码规范
  • Node 版本管理
  • Sass 快速入门教程
  • Terraform入门 - 3. 变更基础设施
  • 阿里云购买磁盘后挂载
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于Flux,Vuex,Redux的思考
  • 理清楚Vue的结构
  • 前端攻城师
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 译米田引理
  • Linux权限管理(week1_day5)--技术流ken
  • ​​​​​​​​​​​​​​Γ函数
  • ​secrets --- 生成管理密码的安全随机数​
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #define 用法
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (02)Unity使用在线AI大模型(调用Python)
  • (二)c52学习之旅-简单了解单片机
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (五)c52学习之旅-静态数码管
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)程序员技术练级攻略
  • .Net 执行Linux下多行shell命令方法
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET开发者必备的11款免费工具
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET连接MongoDB数据库实例教程
  • .net流程开发平台的一些难点(1)
  • .NET企业级应用架构设计系列之结尾篇
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • [Android]How to use FFmpeg to decode Android f...
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作