vue项目配置MongoDB的增删改查操作

news/2024/7/2 19:22:44/文章来源:https://blog.csdn.net/weixin_57163112/article/details/132673279

在Vue中配置MongoDB的增删改查操作,需要先安装`mongoose`模块来连接MongoDB数据库。

1. 在Vue项目的根目录中,使用命令行安装`mongoose`模块:

        npm install mongoose --save

2. 找到启动node的app.js文件(我这里是在server文件中,就是第三步中说的server文件)

const express = require('express')
const app = express()
const mongoose = require('mongoose');
var config = require('./config');//引入config中mongoDB地址// 解析 url-encoded格式的表单数据
app.use(express.urlencoded({ extended: false }));// 解析json格式的表单数据
app.use(express.json());var article=require('./routes/article');
app.use('/article', article);var db=mongoose.connect(config.db.path, {useNewUrlParser: true,useUnifiedTopology: true
})
db.then(function (data) {console.log('--数据库连接成功--');}).catch(function (error) {console.log('数据库连接失败: ' + error);
});module.exports = app

在上面的代码中,`mongoose.connect`用于连接MongoDB数据库 

我这里的config.db.path,是地址配置的,也可以直接将地址写进去

const url = 'mongodb://localhost:27017/mydatabase';
var db=mongoose.connect(url, {useNewUrlParser: true,useUnifiedTopology: true
})

3. 在Vue项目的根目录中新建一个server文件,server文件下新建文件config,在config中新建db.js文件

const mongoose = require('mongoose');
let Promise = require('bluebird');// 定义数据模型
const ArticleSchema = new mongoose.Schema({article_title:String, //标题article_desc:String,    //简介article_info:String,    //内容createdAt: { //创建日期type: Date,default: Date.now}});
//mongoose.model三个参数分别代表模型的名称、模型的Schema、模型的集合名称
const ArticleModel = mongoose.model('Article', ArticleSchema);
Promise.promisifyAll(ArticleModel);
Promise.promisifyAll(ArticleModel.prototype);
module.exports = ArticleModel

mongoose.connection`用于获取数据库连接对象。然后,使用`mongoose.Schema`定义Article的数据模型,并使用`mongoose.model`创建Article模型。(这里的数据模型就是你页面数据的字段)。

4. 在server>routes文件中新建article.js

var express = require('express');
var articleRouter = express.Router();
var ArticleModel = require('../db');
//查询
articleRouter.get('/:id', (req, res) => {const articleId = req.params.id;if (!articleId) {return {err_code: -2,err_msg: 'no id'};}ArticleModel.findOne({_id: articleId}).then(response => {res.send({err_code: 0,data: response});}).catch(err => {console.log(err);res.send({err_code: -1,err_msg: 'server error'});});
});
// 获取列表
articleRouter.get('/', (req, res) => {let page = req.query.page,size = req.query.size,store = req.query.store;page = parseInt(page, 10) || 1;size = parseInt(size, 10) || 100;let skip = (page - 1) * size;let sort = '-createAt';let data = {};Promise.all([//Articletype 集合的数据  find 指定的查询条件 sort 排序规则  skip跳过指定数量的记录,用于分页查询  limit 返回的数据为指定的size  exec查询操作并返回记录ArticleModel.find(data).sort(sort).skip(skip).limit(size).exec(),ArticleModel.count(data)]).then(([data, count]) => {res.send({data: data,total: count,err_code: 0});}).catch(err => {console.log(err);res.send({err_code: -2});});
});
// 新增列表
articleRouter.post('/', (req, res) => {var articleBody=req.bodylet data = {article_url: articleBody.article_url};//先检查是否有已经创建的数据ArticleModel.find(articleBody).then(datas => {'use strict';if (datas.length > 0) {res.send({err_code: -1,err_msg: '资源已存在'});return;}ArticleModel.create(articleBody).then(response => {res.send({err_code: 0,err_msg: '保存成功'});}).catch(res => {res.send({err_code: -2,err_msg: '保存失败'});});});
});
// 删除
articleRouter.delete('/:id', (req, res) => {const articleId = req.params.id;if (!articleId) {return res.send({err_code: -1,err_msg: '缺少ID'});}//mongoDB已经弃用remove使用deleteOne 删除单个文档或者deleteMany 删除多个文档ArticleModel.deleteOne({_id: articleId}).then(response => {res.send({err_code: 0});}).catch(err => {res.send({err_code: -2,err_msg: '删除失败'});});
});
// 修改
articleRouter.put('/', (req, res) => {const articleBody = req.body;const articleId = req.body.id;console.log(req.body)if (!articleId) {return res.send({err_code: -1,err_msg: '缺少id'});}ArticleModel.findOneAndUpdate({_id: articleId}, {$set: articleBody}).then(response => {res.send({err_code: 0,});}).catch(err => {console.log(err);res.send({err_code: -2,err_msg: '数据库错误'});});
});
module.exports = articleRouter

这里遇到最不好找的问题就是Mongoose更新会弃用一些方法,例如删除remove,就会报错ArticleModel.remove is not a function,网上找一下mongoose推荐使用的方法,这里remove更推荐使用`deleteOne`或`deleteMany`方法,取决于你想要删除单个文档还是多个文档。你可以替换`remove`方法为`deleteOne`或`deleteMany`来解决这个问题。 

5. 页面中调用

例子:

查询列表

import axios from 'axios'
dexport default{mounted():{axios.get('/article', {params}).then(res => {console.log(res)//查看是否调用成功});}
}

删除

axios.delete(`/article/${id}`).then(res=>{console.log(res.data)if(res.data.err_code==0){this.$message({message: '删除成功',type: 'success'})this.initList()}else{this.$message({type: 'error',message: res.data.err_msg});}})

6. 请求接口的时候可能会报这个错误

给MongoDB设置了数据库访问权限,所以无论是 打开mongodb和连接去掉账号密码 都是显示数据库报错   所以无论运行node app.js 都是需要权限 才能成功的运用

在数据库连接的前面加上用户名和密码root:root,后面加上 authSource=admin  通过admin库进行登录认证

mongodb://admin:123@localhost:27017/mydatabase?authSource=admin '

如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_166604.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python进行健身手表数据分析

健身手表(Fitness Watch)数据分析涉及分析健身可穿戴设备或智能手表收集的数据,以深入了解用户的健康和活动模式。这些设备可以跟踪所走的步数、消耗的能量、步行速度等指标。本文将带您完成使用Python进行Fitness Watch数据分析的任务。 Fitness Watch数据分析是健…

无涯教程-JavaScript - DAYS360函数

描述 DAYS360函数返回基于360天的年份(十二个月为30天)的两个日期之间的天数,该天数用于会计计算。 语法 DAYS360 (start_date,end_date,[method])争论 Argument描述Required/OptionalStart_dateThe two dates between which you want to know the number of days.Required…

css画箭头图标放标题前面,旋转,border的单个边框设置

CSS边框属性_css border dotted_小张biubiu的博客-CSDN博客 你还不知道css的旋转效果怎么实现?来这里看看吧_css旋转效果_我糖呢的博客-CSDN博客 .sub-title{position: relative;margin-left: 59px;& span{color: #1CDBFE;};& span::before{content: "…

微服务-gateway跨域配置

文章目录 一、前言二、gateway跨域配置1、问题描述1.1、什么是跨域请求?1.1.1、同源策略1.1.2. 安全性考虑1.1.3. 跨域攻击 1.2、问题产生原因 2、解决方法2.1、修改配置文件2.2、配置类统一配置2.3、全局跨域拦截器 三、总结 一、前言 在SpringCloud项目中&#x…

四川玖璨电子商务有限公司:短视频及直播运营

​ 短视频及直播运营是当下最火热的互联网行业之一,它以轻松、有趣的方式改变了人们的生活和娱乐方式。作为一名短视频及直播运营实训学员,我有幸得到了具体的操作指导和实践机会,让我对这个行业有了更深入的了解。 在短视频及直…

官方发布:Mac 版 Visual Studio IDE将于明年 8 月 31 日停止支持

近日,微软官方宣布:适用于 Mac 平台的 Visual Studio 集成开发环境(IDE)已经启动 "退休" 进程。Visual Studio for Mac 17.6 将继续支持 12 个月,持续到 2024 年 8 月 31 日。 微软表示在未来的 1 年内将重…

VSCode 配置 C 语言编程环境

目录 一、下载 mingw64 二、配置环境变量 三、三个配置文件 四、格式化代码 1、安装插件 2、保存时自动格式化 3、左 { 不换行 上了两年大学,都还没花心思去搭建 C 语言编程环境,惭愧,惭愧。 一、下载 mingw64 mingw64 是著名的 C/C…

css中的z-index是什么

css中的z-index是什么 在 CSS 中&#xff0c;有一个属性可以显式控制 HTML 元素的堆叠顺序&#xff1a;z-index。具有较高值的​​元素就会出现在顶部&#xff1a; <style>.box {position: relative;width: 50px;height: 50px;border: 3px solid;background: silver;}.…

电脑硬盘数据恢复一般需要收费多少钱

随着电子信息时代的发展&#xff0c;个人和企业对电脑硬盘中存储的数据越发重视。然而&#xff0c;由于各种原因&#xff0c;硬盘数据丢失的情况屡见不鲜。如果您正陷入这样的困境&#xff0c;您可能会好奇恢复失去的数据需要花费多少钱。本文将为您介绍电脑硬盘数据恢复的一般…

数据结构前言

一、什么是数据结构&#xff1f; 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 上面是百度百科的定义&#xff0c;通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式。 举个…

pdf文件过大如何缩小上传?pdf压缩跟我学

在我们日常工作和生活中&#xff0c;经常会遇到PDF文件过大的问题&#xff0c;给文件传输和存储带来了很大的不便。那么&#xff0c;如何缩小PDF文件大小以便上传呢&#xff1f;下面就给大家分享几个压缩方法&#xff0c;一起来了解下PDF文件压缩方法吧~ 方法一&#xff1a;嗨格…

论文阅读《Nougat:Neural Optical Understanding for Academic Documents》

摘要 科学知识主要存储在书籍和科学期刊中&#xff0c;通常以PDF的形式。然而PDF格式会导致语义信息的损失&#xff0c;特别是对于数学表达式。我们提出了Nougat&#xff0c;这是一种视觉transformer模型&#xff0c;它执行OCR任务&#xff0c;用于将科学文档处理成标记语言&a…

中国手机新进程:折叠屏出海的荣耀,5G中回归的华为

最近&#xff0c;“华为5G回归”“自研麒麟芯片回归”的消息引爆网络。网友开心庆贺之余&#xff0c;也纷纷猜测&#xff0c;华为强势归来&#xff0c;哪家友商最慌&#xff1f; “华为的回归&#xff0c;让竞争充满了更多的可能性和更多的魅力”&#xff0c;与华为渊源颇深的…

ELK框架Logstash配合Filebeats和kafka使用

ELK框架Logstash配合Filebeats和kafka使用 本文目录 ELK框架Logstash配合Filebeats和kafka使用配置文件结构input为标准输入&#xff0c;output为标准输出input为log文件output为标准输出output为es input为tcpspringboot配置logstash配置 input为filebeatsfilebeats配置logsta…

阿里云2核4G服务器5M带宽5年费用价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

OPENCV实现图像查找

特征匹配+单应性矩阵 # -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/4 """ import cv2 import numpy as np# 读图像 img1 = cv2.imread(F:\\learnOpenCV\\openCVLearning\\pictures\\chess

容器编排工具的比较:Kubernetes、Docker Swarm、Nomad

随着容器化技术的普及&#xff0c;容器编排工具成为了现代应用部署和管理的重要组成部分。容器编排工具能够自动化容器的部署、扩展和管理&#xff0c;从而提高应用的可靠性和可伸缩性。在众多的容器编排工具中&#xff0c;Kubernetes、Docker Swarm和Nomad是三个备受关注的主要…

OpenCV(十八):图像直方图

目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法&#xff0c;它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中&#xff0c;可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

同步推送?苹果计划本月推出 iOS17和iPadOS17,你的手机支持吗?

据报道&#xff0c;苹果公司计划在本月推出 iOS 17 和 iPadOS 17 正式版更新。与去年不同的是&#xff0c;这次更新将同时发布&#xff0c;而不是分别发布。根据彭博社的一位消息人士马克・古尔曼的说法&#xff0c;苹果公司认为 iOS 17 和 iPadOS 17 的第八个测试版已经非常接…

浅谈Mysql读写分离的坑以及应对的方案 | 京东云技术团队

一、主从架构 为什么我们要进行读写分离&#xff1f;个人觉得还是业务发展到一定的规模&#xff0c;驱动技术架构的改革&#xff0c;读写分离可以减轻单台服务器的压力&#xff0c;将读请求和写请求分流到不同的服务器&#xff0c;分摊单台服务的负载&#xff0c;提高可用性&a…