Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析


Posted in Javascript onDecember 20, 2019

本文实例讲述了Vue+Node服务器查询Mongo数据库及页面数据传递操作。分享给大家供大家参考,具体如下:

1、利用Mongoose查询MongoDB

通过mongoose依赖可以简捷地操作mondodb数据库,首先安装mongoose:

cnpm install mongoose --save

使用mongoose需要一个模式Schema,它用于定义你从mongodb中查询的每个文档条目的内容,然后通过mongoose.model()生成一个模板model,模板像一个架子,将数据库取到的每个条目中的内容按架子的结构填充,这样就形成了一个便于操作、结构条理的数据对象。通过这个对象就可以访问模板的相关属性,甚至为其定义函数方法。

例如mongodb中的数据库mall中的商品条目如图:

Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析

(PHP Storm中有简单的mongo可视化插件。通过搜索mongo plugin安装该插件,之后在phpstorm主菜单的view/Tool Windows中找到mongo explore开启mongo侧边栏工具,并连接到mongo数据库后就能可视化查看其中数据)

针对其定义Schema,生成并导出商品模板goods:

//在服务端server/modules文件夹下新建goods.js文件
const mongoose=require('mongoose');  
let Schema=mongoose.Schema;      
let productSchema=new Schema({     //通过mongoose的Schema定义模板
 "productId":String,
 "productName":String,
 "salePrice":Number,
 "productImage":String
});
//导出模板goods
module.exports=mongoose.model('goods',productSchema);

注意:Schema中字段的名称要与数据库中一致,否则会因为字段不匹配而造成无法操作数据库。例如我在数据库中是productImage,而schema中是productImg,导致插入时丢失字段。

然后通过goods模板执行数据库查询操作,如果有错返回err,否则返回查询结果doc:

goods.find({},(err,doc)=>{callback()});

2、Node服务端查询数据库并返回结果

①、通过Express框架进行数据库连接:

//服务端server/routes/goods.js文件
//引入相关模块
const express=require('express');
const router=express.Router();
const mongoose=require('mongoose');
const goods=require('../modules/goods')  //引入goods模板
//连接本地mongodb数据库的mall集合
mongoose.connect('mongodb://localhost:27017/mall');
mongoose.connection.on('connected',()=>{
 console.log("mongoDB连接成功");
});
mongoose.connection.on('erroe',()=>{
 console.log("mongoDB连接出错");
});
mongoose.connection.on('disconnected',()=>{
 console.log("mongoDB断开连接");
});

②、对来自前端的get请求进行响应:查询数据库mall集合并将结果放在result.list中,再加上status、msg,以json形式返回res。

router.get('/',(req,res,next)=>{
 //利用goods模板调用mongooseAPI进行数据库查询
 goods.find({},(err,doc)=>{    //查询的回调函数
  "use strict";
  if (err){
   res.json({
    status:1,
    msg:err.message
   })
  }else {
   res.json({//利用res将数据返回给get请求
    status:0,
    msg:'',
    result:{
     count:doc.length,
     list:doc
    }
   })
  }
 })
});

最后记得暴露路由router

module.exports = router;

注:接收请求中的参数一般有三种方式,

  • req.query多用于get请求发送来的数据,参数以?加在请求路径的尾部,用req.query.keyname可以获取到其中的数据。
  • req.body用于接收post请求,post请求将数据放在request正文中,因此req.body.keyname可以得到其请求数据。
  • req.params的参数包含在路径当中,例如请求路径为http://localhost:3000/test/myparam,在服务端读取其中的参数;
router.get('/testparams/:param', function (req, res) {
  console.log('参数为: ' + req.params.param);  //控制台输出路径中的参数:myparam
})

3、跨域请求数据

由于本地Vue运行在localhost:8080,而Node在localhost:3000,若要在vue中利用axios实现数据请求,则需要执行跨域代理操作。在vue中的config/index.js文件的dev中配置一个转发代理,当请求"/goods"时,转发到localhost:3000下的/goods:

Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析

Node服务器对get请求的解析过程:当请求到达localhost:3000端时,Node服务器的app.js文件对请求路径进行解析,通过app.use()将/goods定位到routes/goods.js文件,在该文件中查询数据库的操作并返回结果:

var goods=require('./routes/goods');  //包含文件routes/goods.js
app.use('/goods',goods);        //将访问路径定位到文件

4、vue进行数据请求并渲染到页面

在views/GoodsList.vue文件中利用axios对数据进行请求,定义getGoodsList()方法并在挂载后调用:

mounted:function (){
  this.getGoodsList();
 },
 methods:{
  getGoodsList(){
   axios.get("/goods").then(response =>{
    let res=response.data;
    if(res.status==0){
     this.goodsList=res.result.list;
    }else{
     console.log("从服务器请求数据失败!");
    }
   })
  },

通过axios的get请求/goods,由于上面做了跨域代理,可以向Node服务端发送请求,在回调函数中,response的data是响应返回的实际内容,我们在服务端定义了返回状态status,为0代表正常,并且将数据放在了result.list中,在页面中对list数组进行遍历即可将数据渲染到页面:

注意在遍历每个数据对象时,其键名要与在mongoDB中的定义一致,如item.salePrice可以访问到条目的价格

<li v-for="(item,index) in goodsList">
  <div class="pic">
    <a href="#" rel="external nofollow" ><img v-lazy="`static/${item.productImage}`" alt=""></a>
  </div>
  <div class="main">
    <div class="name">{{item.productName}}</div>
    <div class="price">{{item.salePrice}}</div>
    <div class="btn-area">
      <a href="javascript:;" rel="external nofollow" class="btn btn--m">加入购物车</a>
    </div>
  </div>
</li>

启动mongoDB、Node服务端、运行vue-cli框架后即可在localhost:8080内看到结果如图:

Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
javascript getElementsByName()的用法说明
Jul 31 Javascript
利用jQuery操作对象数组的实现代码
Apr 27 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
Jan 04 Javascript
JavaScript 学习笔记之语句
Jan 14 Javascript
Node.js的基本知识简单汇总
Sep 19 Javascript
jQuery实现三级联动效果
Mar 02 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
小程序云开发之用户注册登录
May 18 Javascript
JavaScript变量作用域及内存问题实例分析
Jun 10 Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
node使用request请求的方法
Dec 20 #Javascript
Vue filter 过滤当前时间 实现实时更新效果
Dec 20 #Javascript
使用JavaScript计算前一天和后一天的思路详解
Dec 20 #Javascript
js正则匹配多个全部数据问题
Dec 20 #Javascript
微信小程序按顺序同步执行的两种方式
Dec 20 #Javascript
Vuex实现数据共享的方法
Dec 20 #Javascript
React 实现车牌键盘的示例代码
Dec 20 #Javascript
You might like
php中文本操作的类
2007/03/17 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
jQuery实现日历效果
2020/09/11 jQuery
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
手把手教你python实现SVM算法
2017/12/27 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
库房主管岗位职责
2013/12/31 职场文书
个人优缺点自我评价
2014/01/27 职场文书
六一节目主持词
2014/04/01 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
先进事迹材料范文
2014/12/29 职场文书
大学班干部竞选稿
2015/11/20 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android