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


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

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

            npm install mongoose --save

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

    1. const express = require('express')
    2. const app = express()
    3. const mongoose = require('mongoose');
    4. var config = require('./config');//引入config中mongoDB地址
    5. // 解析 url-encoded格式的表单数据
    6. app.use(express.urlencoded({ extended: false }));
    7. // 解析json格式的表单数据
    8. app.use(express.json());
    9. var article=require('./routes/article');
    10. app.use('/article', article);
    11. var db=mongoose.connect(config.db.path, {
    12. useNewUrlParser: true,
    13. useUnifiedTopology: true
    14. })
    15. db.then(function (data) {
    16. console.log('--数据库连接成功--');
    17. }).catch(function (error) {
    18. console.log('数据库连接失败: ' + error);
    19. });
    20. module.exports = app

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

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

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

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

    1. const mongoose = require('mongoose');
    2. let Promise = require('bluebird');
    3. // 定义数据模型
    4. const ArticleSchema = new mongoose.Schema({
    5. article_title:String, //标题
    6. article_desc:String, //简介
    7. article_info:String, //内容
    8. createdAt: { //创建日期
    9. type: Date,
    10. default: Date.now
    11. }
    12. });
    13. //mongoose.model三个参数分别代表模型的名称、模型的Schema、模型的集合名称
    14. const ArticleModel = mongoose.model('Article', ArticleSchema);
    15. Promise.promisifyAll(ArticleModel);
    16. Promise.promisifyAll(ArticleModel.prototype);
    17. module.exports = ArticleModel

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

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

    1. var express = require('express');
    2. var articleRouter = express.Router();
    3. var ArticleModel = require('../db');
    4. //查询
    5. articleRouter.get('/:id', (req, res) => {
    6. const articleId = req.params.id;
    7. if (!articleId) {
    8. return {
    9. err_code: -2,
    10. err_msg: 'no id'
    11. };
    12. }
    13. ArticleModel.findOne({_id: articleId}).then(response => {
    14. res.send({
    15. err_code: 0,
    16. data: response
    17. });
    18. }).catch(err => {
    19. console.log(err);
    20. res.send({
    21. err_code: -1,
    22. err_msg: 'server error'
    23. });
    24. });
    25. });
    26. // 获取列表
    27. articleRouter.get('/', (req, res) => {
    28. let page = req.query.page,
    29. size = req.query.size,
    30. store = req.query.store;
    31. page = parseInt(page, 10) || 1;
    32. size = parseInt(size, 10) || 100;
    33. let skip = (page - 1) * size;
    34. let sort = '-createAt';
    35. let data = {};
    36. Promise.all([
    37. //Articletype 集合的数据 find 指定的查询条件 sort 排序规则 skip跳过指定数量的记录,用于分页查询 limit 返回的数据为指定的size exec查询操作并返回记录
    38. ArticleModel.find(data).sort(sort).skip(skip).limit(size).exec(),
    39. ArticleModel.count(data)
    40. ]).then(([data, count]) => {
    41. res.send({
    42. data: data,
    43. total: count,
    44. err_code: 0
    45. });
    46. }).catch(err => {
    47. console.log(err);
    48. res.send({
    49. err_code: -2
    50. });
    51. });
    52. });
    53. // 新增列表
    54. articleRouter.post('/', (req, res) => {
    55. var articleBody=req.body
    56. let data = {
    57. article_url: articleBody.article_url
    58. };
    59. //先检查是否有已经创建的数据
    60. ArticleModel.find(articleBody).then(datas => {
    61. 'use strict';
    62. if (datas.length > 0) {
    63. res.send({
    64. err_code: -1,
    65. err_msg: '资源已存在'
    66. });
    67. return;
    68. }
    69. ArticleModel.create(articleBody).then(response => {
    70. res.send({
    71. err_code: 0,
    72. err_msg: '保存成功'
    73. });
    74. }).catch(res => {
    75. res.send({
    76. err_code: -2,
    77. err_msg: '保存失败'
    78. });
    79. });
    80. });
    81. });
    82. // 删除
    83. articleRouter.delete('/:id', (req, res) => {
    84. const articleId = req.params.id;
    85. if (!articleId) {
    86. return res.send({
    87. err_code: -1,
    88. err_msg: '缺少ID'
    89. });
    90. }
    91. //mongoDB已经弃用remove使用deleteOne 删除单个文档或者deleteMany 删除多个文档
    92. ArticleModel.deleteOne({_id: articleId}).then(response => {
    93. res.send({
    94. err_code: 0
    95. });
    96. }).catch(err => {
    97. res.send({
    98. err_code: -2,
    99. err_msg: '删除失败'
    100. });
    101. });
    102. });
    103. // 修改
    104. articleRouter.put('/', (req, res) => {
    105. const articleBody = req.body;
    106. const articleId = req.body.id;
    107. console.log(req.body)
    108. if (!articleId) {
    109. return res.send({
    110. err_code: -1,
    111. err_msg: '缺少id'
    112. });
    113. }
    114. ArticleModel.findOneAndUpdate({_id: articleId}, {$set: articleBody}).then(response => {
    115. res.send({
    116. err_code: 0,
    117. });
    118. }).catch(err => {
    119. console.log(err);
    120. res.send({
    121. err_code: -2,
    122. err_msg: '数据库错误'
    123. });
    124. });
    125. });
    126. module.exports = articleRouter

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

    5. 页面中调用

    例子:

    查询列表

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

    删除

    1. axios.delete(`/article/${id}`).then(res=>{
    2. console.log(res.data)
    3. if(res.data.err_code==0){
    4. this.$message({
    5. message: '删除成功',
    6. type: 'success'
    7. })
    8. this.initList()
    9. }else{
    10. this.$message({
    11. type: 'error',
    12. message: res.data.err_msg
    13. });
    14. }
    15. })

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

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

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

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

    如下图所示:

  • 相关阅读:
    Python优化算法03——粒子群算法
    反射、枚举及lambda表达式
    《TCP/IP网络编程》阅读笔记--进程间通信
    10月1日作业
    Blob和ArrayBuffer和File
    PMP每日十题-2024年2月29日
    Wiki.js - 下一代的开源Wiki软件
    微信小程序实现类似于 vue中ref管理调用子组件函数的方式
    NVIDIA Jetson之ONNX的正确安装方法
    Docker基本管理和虚拟化
  • 原文地址:https://blog.csdn.net/weixin_57163112/article/details/132673279