vue+express+mongodb 实现 增删改查
一、创建一个vue项目
用脚手架vue-cli搭建一个项目,数据请求用axios方式,写几个按钮用来调接口(vue这块不做多解释,不懂的可以先去官网学习vue-cli:https://cli.vuejs.org/zh/guide/cli-service.html axios:http://www.axios-js.com/)
注意点:在用axios调用接口的时候会产生跨域,所以有配置下:在vue项目根目录下打开config文件夹下的index.js文件中proxyTable中加入配置内容
proxyTable: {
'/api':{
target:'http://localhost:3000',
changeOrigin:true,
}
},
这里我服务器开的是3000端口,而vue默认是8080端口
二、express接口
1、新创建一个文件夹,用于放服务端代码,这里文件夹名字一mongodb为例
在根目录下打开命令窗口(默认都安装了node)npm init -y 初始化,然后下载依赖包
express模块用来创建路由
mongoose模块用来创建数据库,连接数据库
body-parser模块用来对post请求的请求体进行解析
npm install express body-parser mongoose --save
2、在根目录下创建app.js文件,用来启动express服务
- //app.js文件
- //引入刚才定义的hero路由
- const hero = require('./router/hero')
- //1.引入express模块
- const express = require('express')
- //中间介 解析post ,get 登返回的数据
- var bodyParser = require('body-parser');
- //2.创建app对象
- const app = express()
- app.use(bodyParser());
- app.use('/api',hero)
- //定义简单路由
- app.use('/',(req,res) => {
- res.send('成功')
- })
- //定义服务启动端口
- app.listen(3000,() => {
- console.log('服务器开启成功,端口3000')
- })
在根目录下打开命令窗口输入node app 执行后打印“服务器开启成功,端口号3000”,这代表服务器已开启,浏览器访问 http://localhost:3000/ 页面会显示 :成功
3、创建数据模型
在项目根目录建立一个models
文件夹,用来存储数据模型,每个模型都是由一个Schema生产,具体的我们不用太在意,如果有兴趣可自行百度。
在models
文件夹中创建一个hero.js
文件,内容如下
- //hero.js文件
- //引入mongoose模块
- const mongoose = require('mongoose')
- //定义数据模型,可以看到,我们下面创建了一个表,表中的数据有name、age、sex等字段,并且这些字段的数据类型也定义了,最后将model导出即可
- const heroSchema = mongoose.Schema({
- name :String,
- age : String,
- sex : String,
- address : String,
- dowhat : String,
- imgArr:[],
- favourite:String,
- explain:String
- }, { collection: 'myhero'})
- //这里mongoose.Schema最好要写上第二个参数,明确指定到数据库中的哪个表取数据,我这里写了myhreo,目的就是为了以后操作数据要去myhreo表中。
- // 这里不写第二个参数的话,后面你会遇到坑。
- //导出model模块
- const Hero = module.exports = mongoose.model('hero',heroSchema);
4、创建exress增删改查 业务代码
在项目根目录创建一个router
文件夹,文件夹中创建一个hero.js
文件,内容如下,分别为增删改查、添加图片等路由 ,在逻辑代码中药注意在这里插入了一下内容用来连接mongodb数据库。
- // 连接数据库
- mongoose.connect("mongodb://localhost:27017/test", { useNewUrlParser: true });
- const conn = mongoose.connection;
- conn.on("error", () => console.error("连接数据库失败"));
- //引入express模块
- const express = require("express");
- //定义路由级中间件
- const router = express.Router();
- //引入数据模型模块
- const Hero = require("../models/hero");
- // mongoose.js
- const mongoose = require("mongoose");
- // 连接数据库
- mongoose.connect("mongodb://localhost:27017/test", { useNewUrlParser: true });
- const conn = mongoose.connection;
- conn.on("error", () => console.error("连接数据库失败"));
- // 查询所有英雄信息路由
- router.get("/hero", (req, res) => {
- Hero.find({})
- .sort({ update_at: -1 })
- .then(heros => {
- res.json(heros);
- })
- .catch(err => {
- res.json(err);
- });
- });
- router.get("/user", (req, res) => {
- res.end("来啦");
- });
- // 通过ObjectId查询单个英雄信息路由
- router.get("/hero/:id", (req, res) => {
- Hero.findById(req.params.id)
- .then(hero => {
- res.json(hero);
- })
- .catch(err => {
- res.json(err);
- });
- });
- // 添加一个英雄信息路由
- router.post("/hero", (req, res) => {
- //使用Hero model上的create方法储存数据
- Hero.create(req.body, (err, hero) => {
- if (err) {
- res.json(err);
- } else {
- console.log('1');
- res.json(hero);
- }
- });
- });
- //更新一条英雄信息数据路由
- router.put("/hero/:id", (req, res) => {
- Hero.findOneAndUpdate(
- { _id: req.params.id },
- {
- $set: {
- name: req.body.name,
- age: req.body.age,
- sex: req.body.sex,
- address: req.body.address,
- dowhat: req.body.dowhat,
- favourite: req.body.favourite,
- explain: req.body.explain
- }
- },
- {
- new: true
- }
- )
- .then(hero => res.json(hero))
- .catch(err => res.json(err));
- });
- // 添加图片路由
- router.put("/addpic/:id", (req, res) => {
- Hero.findOneAndUpdate(
- { _id: req.params.id },
- {
- $push: {
- imgArr: req.body.url
- }
- },
- {
- new: true
- }
- )
- .then(hero => res.json(hero))
- .catch(err => res.json(err));
- });
- //删除一条英雄信息路由
- router.delete("/hero/:id", (req, res) => {
- console.log(req.params.id);
- Hero.findOneAndRemove({
- _id: req.params.id
- })
- .then(hero => res.send(`${hero.title}删除成功`))
- .catch(err => res.json(err));
- });
- module.exports = router;
这个文件会在app.js中引入,上面app.js中代码已引入
三、mongodb数据持久化
为了方便我们查询和观看效果,可以先在数据库中插入一条数据
1、下载 mongodb https://www.mongodb.com/download-center/community 具体安装可以自行去百度,这里不做解释
2、下载mongo可视化工具 https://studio3t.com/download/ 数据库客户端,可以方便的操作数据库
3、开启数据库:在安装目录下 执行命令mongod -dbpath "自己的安装目录/data"
4、在安装目录下的lib中执行命令 mongo
show dbs 查看数据库
use test 创建数据库
db.myhero.insert({
//根据创建的数据模型 插入的数据
//myhero是一个集合
})
插入数据后年可以在studio3t中直接查看 。
更多的数据库操作命令可以百度去查,这里不做过多扩展。
四、执行程序
开启数据库=》开启服务器=》开启vue项目
可以在vue页面调用接口操作数据了
===========================================================================
结束 大家有好的见解可以提出来,不懂的地方可以提问,谢谢!
vue+express+mongodb 实现 增删改查的更多相关文章
- express+mongodb+mongoose增删改查
增加 修改 删除 数据库 这是一个前后端分离的项目前端项目地址:https://gitee.com/dingshao/express_qd.git后端项目地址:https://gitee.com/di ...
- mongodb 数据库 增删改查
mongodb 数据库 增删改查 增: // 引入express 模块 var express = require('express'); // 路由var router = expr ...
- Java连接MongoDB进行增删改查
1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...
- MongoDB的增删改查 转
MongoDB的增删改查 (黎明你好原创作品,转载请注明) MongoDB中数据的基本单元叫做文档,采用json的键-值的方式.多个键及其关联的值有序的存放在一起变是文档.类似于编程语言中的键值关系. ...
- Java实现mongodb原生增删改查语句
Java实现mongodb原生增删改查语句 2018-03-16 自动化测试时,需校验数据库数据,为了快速自动化,在代码中用原生增删改查语句操作mongodb 结构 代码 0 pom.xml < ...
- Scala对MongoDB的增删改查操作
=========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...
- C# 对MongoDB 进行增删改查的简单操作
C# 对MongoDB 进行增删改查的简单操作 下面演示下C#操作MongoDB驱动的简单的增删改查代码 运用到的MongoDB支持的C#驱动,当前版本为1.6.0 1,连接数据库 /// & ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...
随机推荐
- 带你入门 CSS Grid 布局
前言 三月中旬的时候,有一个对于 CSS 开发者来说很重要的消息,最新版的 Firefox 和 Chrome 已经正式支 CSS Grid 这一新特性啦.没错:我们现在就可以在最流行的两大浏览器上玩转 ...
- HTML、CSS笔记
盒模型 在CSS中,使用标准盒模型描述这些矩形盒子中的每一个.这个模型描述了元素所占空间的内容.每个盒子有四个边:外边距边, 边框边, 内填充边 与 内容边. 在标准模式下,一个块的总宽度= widt ...
- [红日安全]Web安全Day9 - 文件下载漏洞实战攻防
本文由红日安全成员: Once 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字 ...
- 聊聊CAS - 面试官最喜欢问的并发编程专题
什么是CAS 学习Java并发编程,CAS(Compare And Set)机制都是一个不得不掌握的知识点.除了通过synchronized进行并发控制外,还可以通过CAS的方式控制,大家熟悉的Ree ...
- 3DGIS与BIM集成集成技术及铁路桥梁可视化系统
3DGIS与BIM的集成技术 3DGIS与BIM的集成技术包括2部分:一是将Revit软件生成的BIM针对3DGIS的快速无损格式转换,这种转换包括几何信息(如形状.位置等信息)和属性信息(如建筑信息 ...
- php获取当前周的第一天与最后一天
1 2 3 4 5 6 7 8 9 10 // 当前日期 $sdefaultDate = date("Y-m-d"); // $first =1 表示每周星期一为开始日期 ...
- 设计模式-15命令模式(Command Pattern)
1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...
- 安卓 打飞机 app 开发 第一篇
先上效果图 其实,当时刚买 htc G8 的时候(那时北京的房价还是6千一平),安卓2.1 ,2.3 的时候就已经有安卓方面的开发的兴趣,但后来就没有弄过... today 突然想起来,手机上连个游戏 ...
- Flutter Form表单控件超全总结
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Form.FormField.TextFormField是 ...
- RAC修改VIP地址
目录 当前环境 1.通过[srvctl config]确认当前VIP地址. 2.关闭dbconsole[对应的em] 3.关闭数据库实例 4.关闭asm实例 5.关闭结点服务 6.修改两个节点的/et ...