设为首页 收藏本站
查看: 1287|回复: 0

[经验分享] vue+node+mongodb实现的页面

[复制链接]
发表于 2017-12-15 23:02:56 | 显示全部楼层 |阅读模式
  源代码地址:https://github.com/GainLoss/vue-node-mongodb
  目前这个项目实现的是:
  1.利用vue-cli实现前台页面的编写
  (1)页面的跳转利用的是vue-router:基本是$.router.push这种方法 还有就是使用命名路由 和动态路由
  (2)页面每一部分使用的是组件components:里面涉及的有父子组件之间的数据传递 还有生命周期函数
  2.使用vue-resource从后台获取数据
  (1)不加参数的传递
  (2)加参数的传递
  3.使用express编写后台的接口
  使用最多的就是路由中间件设计相关的接口
  4.mongdb中的Schema和Model
  定义每个集合和集合对应的对象 并且连接上数据库 还需要实现对数据库的增删改查
  简单实现前后台交互的步骤:
  1.下载npm和node;
  2.我们前台框架用的是vue所以直接选用vue的脚手架vue-cli;下载安装执行 可以参考:http://www.cnblogs.com/GainLoss/p/6592729.html;
  3.到这步我们已经可以用npm run dev打开一个vue的项目了,我们想从后台调取数据就需要编写后台代码和连接上数据库,在这里我们用的是mongodb作为数据库;
  4.配置数据库的环境:http://www.cnblogs.com/GainLoss/p/6906937.html 这里面是数据库安装和启动完成
  基本界面是:如果想深入了解mongodb:http://www.cnblogs.com/GainLoss/p/7416561.html(这里面是基本的一些操作) 可以直接在Robo 3T中创建集合和数据
  需要注意的一点是:有时候直接打开这个连接数据库是连接不上的,因为mongodb没有启动,这时我们需要自己手动启动mongodb
DSC0000.png

  5.数据库配置成功,现在需要用node编写后台代码,实现前台可以调取数据库中的数据
  (1)在项目根目录下面创建一个文件夹是放置后台代码的取名为server,里面新建三个文件index.js(启动后台代码的入口)db.js(连接数据库,创建模型和对象)api.js(创建后台接口)
  db.js
  

var mongoose=require('mongoose');  

//链接数据库  
mongoose.connect('mongodb://localhost/test',{ useMongoClient: true });
  

  
const db=mongoose.connection;
  
db.once('error',()=>console.log('链接数据库失败'));
  
db.once('open',()=>console.log('链接数据库成功'))
  
//创建模型
  
const listSchema=mongoose.Schema({
  title:String,
  author:String,
  
})
  
//创建对象
  
const Models={
  list:mongoose.model('list',listSchema,'list'),
  
}
  
module.exports=Models;
  

  api.js
  

//获取到对象  
var models=require('./db.js');
  
//使用node用的是express
  
var express=require('express');
  
//用的是路由中间件
  
var router=express.Router();
  

  
router.get('/api/list/showlist',(req,res)=>{
  models.list.find((err,data)=>{
  if(err){
  res.send(err)
  }else{
  res.send(data)
  console.log(data)
  }
  })
  
})
  
module.exports=router;
  

  index.js
  

//引入接口  
var api=require('./api');
  
var fs=require('fs');
  
var path=require('path');
  
//bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理.
  
var bodyParser=require('body-parser');
  
var express=require('express');
  
var app=express();
  

  
//将插件放入项目中
  
app.use(bodyParser.json());
  
app.use(bodyParser.urlencoded({extended:false}));
  
app.use(api);
  
app.use(express.static(path.resolve(__dirname,'../dist')));
  

  
//因为是单页面 所有请求都走/dist/index.html
  
app.get('*',function(req,res){
  const html=fs.readFileSync(path.resolve(__dirname,'../dist/index.html'),'utf-8')
  res.send(html)
  
})
  
//监听端口
  
app.listen(8811);
  
console.log('连接上后台')
  

  这样后台代码基本写完了
  6.还有需要代理一下
  在config/index.js中
  

dev: {  env: require(
'./dev.env'),  port:
8812,  autoOpenBrowser:
true,  assetsSubDirectory:
'static',  assetsPublicPath:
'/',  proxyTable: {
'/api': {  target:
'http://localhost:8811/api',  changeOrigin:
true,  pathRewrite: {
'^/api': ''  }
  }
  
},
  

  7.执行代码:(执行代码的命令可以查看pckage.json中的scripts,多说一句是packager.json里面有你下载的插件名和版本号)
  在当前文件中打开cmd执行npm run dev
  在当前文件的server文件夹打开cmd执行node index
  遇到的问题和解决方案:
  1.如果在mongodb创建一个集合,那么在你添加给这个集合添加数据之后,在数据库中会多一个这个集合名称+s的集合?
  解决:在创建model的时候这个写:home:mongoose.model('home',homesSchema,'home') 添加第三个参数 设置为集合的名字 那么添加的数据就会到正确的集合中
  2.在父组件给子组件传递一个数值,但是这个数值正好是子组建中http的参数,就有可能出现这种http参数没有获取到的情况?
  解决:原因是参数传递和组件渲染顺序是不一致的,这时候可以用vue中的watch监听一下props中message也就是传过来的数据
  3.需要注意的是:新版的mongoose可能是会先这种警告:
  (node:2328) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option
  if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
  这是新版的mongoose出现的错误,解决是mongoose.connect('mongodb://localhost/test',{ useMongoClient: true });
  4.一些其他的坑:http://www.cnblogs.com/GainLoss/p/6929299.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424531-1-1.html 上篇帖子: Linux下MongoDB安装和配置详解 下篇帖子: MongoDB 高可用集群搭建(3.4)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表