源代码地址: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

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

 

vue+node+mongodb实现的页面的更多相关文章

  1. vue+node+mongodb实现的功能

    用vue+node +mongodb实现前后台交互的页面代码,已经上传到github上, 地址是: https://github.com/GainLoss/vue-node-mongodb https ...

  2. 后台管理系统:vue&node&MongoDB(一)

    后台管理系统 使用工具: Vue    Node     Mongodb   Element-ui 一.后台(Node+Mongodb) 前期准备: 需要下载的包: mongooes -------- ...

  3. 学习笔记:Vue+Node+Mongodb构建简单商城系统(一)

    所需前置知识: HTML.CSS.JS.Vue.ES6.Npm.Webpack.Node.Express.Mongodb 项目整体架构: IDE:webstorm: 项目建立过程(cmd常用命令行指令 ...

  4. vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口

    菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...

  5. vue+node+mongoDB 火车票H5(四)---完成静态页面

    各项配置都好了,就可以开始写静态页面了,先别急着写,看一下页面又哪些公用的部分可以提取出来的,统一放到components组件文件夹中 header头部文件夹放一些头部常用组件,如首页的banner切 ...

  6. 一个 Vue + Node + MongoDB 博客系统

    源码 耗时半载(半个月)的大项目终于完成了.这是一个博客系统,使用 Vue 做前端框架,Node + express 做后端,数据库使用的是 MongoDB.实现了用户注册.用户登录.博客管理(文章的 ...

  7. vue+node+mongodb前后端分离博客系统

    感悟 历时两个多月,终于利用工作之余完成了这个项目的1.0版本,为什么要写这个项目?其实基于vuejs+nodejs构建的开源博客系统有很多,但是大多数不支持服务端渲染,也不支持动态标题,只是做到了前 ...

  8. vue+node+mongoDB前后端分离个人博客(入门向)

    最近学习了VUE,自己为了学习做了个小小的博客,功能很简单,不过开发过程中也遇到了很多坑,所以记录下来方便以后使用.欢迎大家交流学习. 功能 实现了用户注册.登录.token检测登录.用户留言.个人中 ...

  9. vue+node+mongoDB 火车票H5(六)---城市列表保存到MongoDB数据库并且启用node.js服务

    把车站列表保存到数据库,并且从本地创建服务 node.js创建httpserver 1.搭建基于express的运行环境 全局安装express-gengerator cnpm install -g ...

随机推荐

  1. 【TMF eTOM】eTOM的概念和术语

    eTOM的概念 为了有效地理解和使用eTOM业务流程框架,我们首先要理解构成eTOM的关键概念.这些概念使eTOM成为集成业务流程设计/评估与传统过程的一个非常有效的工具.在这些概念中使用了在本文中详 ...

  2. hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)

    Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...

  3. 洛谷P3043 [USACO12JAN]牛联盟Bovine Alliance

    P3043 [USACO12JAN]牛联盟Bovine Alliance 题目描述 Bessie and her bovine pals from nearby farms have finally ...

  4. LeetCode.11-装水最多的容器(Container With Most Water)

    这是悦乐书的第350次更新,第375篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第5题(顺位题号是11).给定n个非负整数a1,a2,-,an,其中每个表示坐标(i ...

  5. Kotlin VS Java:基本语法差异

    Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的社区不断增长. 每个人都在谈论它,并说它很酷. 但为什么这么特别? 我们准备了一系列文章,分享我们在Kotlin开发Android应用 ...

  6. 搭建一个简单的FTP服务器

    本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主 ...

  7. ios 自定义导航栏,开启侧滑返回手势

    自定义一个常用ListViewController .h文件 #import <UIKit/UIKit.h> @interface ListViewController : UIViewC ...

  8. AT2045 Salvage Robots

    传送门 这个题只要想到移动机器人和移动出口是等价的就好做了 考虑设\(f[i][j][k][t]\)为最远向左移动\(i\),向右移动\(j\),向上移动\(k\),向下移动\(t\),这个矩形内最多 ...

  9. [转]深入探讨C语言中局部变量与全局变量的作用域与存储类别

    C语言中局部变量和全局变量变量的作用域与存储类别(auto,static,extern,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元, ...

  10. 如何直接修改cf,of等标志位的值?

    如何直接修改 cf,of 等 标志寄存器位的值? 我记得在哪个教程里见过,但是不太记得了… 貌似是在yjx驱动教程里面… 我想弄这个的原因是想验证 网上查到的 各种跳转语句(ja,jl,jg等) 需要 ...