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

在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.rhkb.cn/news/121908.html

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

相关文章

Java开发之Redis(面试篇 持续更新)

文章目录 前言一、redis使用场景1. 知识分布2. 缓存穿透① 问题引入② 举例说明③ 解决方案④ 实战面试 3. 缓存击穿① 问题引入② 举例说明③ 解决方案④ 实战面试 4. 缓存雪崩① 问题引入② 举例说明③ 解决方案④ 实战面试 5. 缓存-双写一致性① 问题引入② 举例说明③ 解决…

Linux执行命令

命令格式 主命令 选项 参数(操作对象)例如: 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令(builtin):shell程序自带的命令。 外部命令:有独立…

多通道振弦数据记录仪应用桥梁安全监测的关键要点

多通道振弦数据记录仪应用桥梁安全监测的关键要点 随着近年来桥梁建设和维护的不断推进,桥梁安全监测越来越成为公共关注的焦点。多通道振弦数据记录仪因其高效、准确的数据采集和处理能力,已经成为桥梁安全监测中不可或缺的设备。本文将从以下几个方面…

【JavaEE】_HTML

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签:h1~h6 2.3 段落标签:p 2.4 换行标签:br 2.5 格式化标签 2.6 图片标签:img 2.7 超链接标签:a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

PPO算法

PPO算法 全称Proximal Policy Optimization,是TRPO(Trust Region Policy Optimization)算法的继承与简化,大大降低了实现难度。原论文 算法大致流程 首先,使用已有的策略采样 N N N条轨迹,使用这些轨迹上的数据估计优势函数 A ^ …

TCP 和 UDP 的区别、TCP 是如何保证可靠传输的?

先来介绍一些osi七层模型 分为应用层、表示层、会话层、运输层、网络层、链路层、物理层。 应用层(数据):确定进程之间通信的性质以及满足用户需要以及提供网络和用户应用,为应用程序提供服务,DNS,HTTP,HTTPS&#xf…

【LeetCode】剑指 Offer <二刷>(7)

目录 题目:剑指 Offer 14- I. 剪绳子 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 14- II. 剪绳子 II - 力扣(…

Java“牵手”唯品会商品详情数据,唯品会商品详情API接口,唯品会API接口申请指南

唯品会平台商品详情接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取唯品会商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口,…

Rhinoceros(犀牛)使用技巧:有关曲线和曲面的分析

Rhinoceros(犀牛) for Mac破解版是一款功能强大的高级建模软件,可以创建、编辑、分析、提供、渲染、动画与转换 NURBS 线条、曲面、实体与多边形网格。不受精度、复杂、阶数或是尺寸的限制,在本篇文章中,为您介绍的是有…

CUDA 问题 ,一直头大。。。。

1.卸载cuda ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnn_Zhijun.liStudio的博客-CSDN博客ubuntu系统安装/卸载cuda和cudnn_怎么删除cudnnhttps://blog.csdn.net/weixin_45921929/article/details/128849198?ops_request_misc%257B%2522request%255Fid%2522%253A%252216939…

复现XSS漏洞及分析

XSS漏洞概述: 类型一:反射型 类型二:存储型 类型三:DOM型 复现20字符短域名绕过 一、安装BEEF 1、在Kali中运行apt install beef-xss 2、运行beef 3、在浏览器访问 二、安装galleryCMS *遇到一点小问题 提示"last…

ping: www.baidu.com: Name or service not known 写了DNS还是不行

环境描述:ESXI平台上,一台Centos7虚拟主机。 问题描述:平台上的其他的虚拟机可以正常ping通,就这台ping IP地址可以通,ping域名解析失败。 排查过程: 1、检查网卡配置文件和/etc/resolv.conf配置文件是否…

postgis数据库导出csv表再导入postgis

1、导出csv表 from settings_Address import * from sqlalchemy import create_engine, MetaData import pandas as pd def create_conn(Postgis_user,Postgis_password,Postgis_host,Postgis_port,dbname_PG):# return create_engine(PostgispyPostgis://{}:{}{}:{}/{}.forma…

FOXBORO FBM232 P0926GW 自动化控制模块

Foxboro FBM232 P0926GW 是 Foxboro(福克斯博罗)自动化控制系统的一部分,通常用于监测和控制工业过程。以下是关于这种类型的自动化控制模块可能具有的一些常见功能: 数字输入通道: FBM232 P0926GW 控制模块通常具有多…

HTML 标签讲解

HTML 标签讲解 HTML 语言结构根元素元数据元素主体根元素大纲元素文本内容语义化内联文本图像与多媒体编辑标识table表格内容表单内容table表单 HTML 语言结构 Markup (标记、标签)用来容纳和描述内容 严格意义上,标签是指开始标签&#xf…

Spring-Cloud-Openfeign如何传递用户信息?

用户信息传递 微服务系统中,前端会携带登录生成的token访问后端接口,请求会首先到达网关,网关一般会做token解析,然后把解析出来的用户ID放到http的请求头中继续传递给后端的微服务,微服务中会有拦截器来做用户信息的…

OFDM 系统在 AWGN 信道下对不同载波频率偏移 (CFO) 的 BER 灵敏度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

关于使用RT-Thread系统读取stm32的adc无法连续转换的问题解决

关于使用RT-Thread系统读取stm32的adc无法连续转换的问题解决 今天发现rt系统的adc有一个缺陷(也可能是我移植的方法有问题,这就不得而知了!),就是只能单次转换,事情是这样的: 我在stm32的RT-T…

Git 版本回退 超神步骤

Git 版本回退 一. 背景 多版本分支开发,合并版本问题太多,需要回滚到某次版本。我的git客服端工具是 sourcetree 二.操作步骤 2.1 切到当前需要回退版本的分支 2.2 右击需要具体某一个分支,这个分支就是你想切到的分支版本,具体…

Windows中多线程的基础知识1——互斥对象

目录 1 多线程的基本概念1.1 进程一、程序和进程的概念二、进程组成三、进程地址空间 1.2 线程一、线程组成二、线程运行三、线程创建函数 1.3 多进程与多线程并发一、多进程并发二、多线程并发 2 线程同步2.1 一个经典的线程同步问题2.2 利用互斥对象实现线程同步一、创建互斥…