vue+node+mongodb实现的页面
源代码地址: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实现的页面的更多相关文章
- vue+node+mongodb实现的功能
用vue+node +mongodb实现前后台交互的页面代码,已经上传到github上, 地址是: https://github.com/GainLoss/vue-node-mongodb https ...
- 后台管理系统:vue&node&MongoDB(一)
后台管理系统 使用工具: Vue Node Mongodb Element-ui 一.后台(Node+Mongodb) 前期准备: 需要下载的包: mongooes -------- ...
- 学习笔记:Vue+Node+Mongodb构建简单商城系统(一)
所需前置知识: HTML.CSS.JS.Vue.ES6.Npm.Webpack.Node.Express.Mongodb 项目整体架构: IDE:webstorm: 项目建立过程(cmd常用命令行指令 ...
- vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口
菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...
- vue+node+mongoDB 火车票H5(四)---完成静态页面
各项配置都好了,就可以开始写静态页面了,先别急着写,看一下页面又哪些公用的部分可以提取出来的,统一放到components组件文件夹中 header头部文件夹放一些头部常用组件,如首页的banner切 ...
- 一个 Vue + Node + MongoDB 博客系统
源码 耗时半载(半个月)的大项目终于完成了.这是一个博客系统,使用 Vue 做前端框架,Node + express 做后端,数据库使用的是 MongoDB.实现了用户注册.用户登录.博客管理(文章的 ...
- vue+node+mongodb前后端分离博客系统
感悟 历时两个多月,终于利用工作之余完成了这个项目的1.0版本,为什么要写这个项目?其实基于vuejs+nodejs构建的开源博客系统有很多,但是大多数不支持服务端渲染,也不支持动态标题,只是做到了前 ...
- vue+node+mongoDB前后端分离个人博客(入门向)
最近学习了VUE,自己为了学习做了个小小的博客,功能很简单,不过开发过程中也遇到了很多坑,所以记录下来方便以后使用.欢迎大家交流学习. 功能 实现了用户注册.登录.token检测登录.用户留言.个人中 ...
- vue+node+mongoDB 火车票H5(六)---城市列表保存到MongoDB数据库并且启用node.js服务
把车站列表保存到数据库,并且从本地创建服务 node.js创建httpserver 1.搭建基于express的运行环境 全局安装express-gengerator cnpm install -g ...
随机推荐
- 【TMF eTOM】eTOM的概念和术语
eTOM的概念 为了有效地理解和使用eTOM业务流程框架,我们首先要理解构成eTOM的关键概念.这些概念使eTOM成为集成业务流程设计/评估与传统过程的一个非常有效的工具.在这些概念中使用了在本文中详 ...
- hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)
Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...
- 洛谷P3043 [USACO12JAN]牛联盟Bovine Alliance
P3043 [USACO12JAN]牛联盟Bovine Alliance 题目描述 Bessie and her bovine pals from nearby farms have finally ...
- LeetCode.11-装水最多的容器(Container With Most Water)
这是悦乐书的第350次更新,第375篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第5题(顺位题号是11).给定n个非负整数a1,a2,-,an,其中每个表示坐标(i ...
- Kotlin VS Java:基本语法差异
Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的社区不断增长. 每个人都在谈论它,并说它很酷. 但为什么这么特别? 我们准备了一系列文章,分享我们在Kotlin开发Android应用 ...
- 搭建一个简单的FTP服务器
本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主 ...
- ios 自定义导航栏,开启侧滑返回手势
自定义一个常用ListViewController .h文件 #import <UIKit/UIKit.h> @interface ListViewController : UIViewC ...
- AT2045 Salvage Robots
传送门 这个题只要想到移动机器人和移动出口是等价的就好做了 考虑设\(f[i][j][k][t]\)为最远向左移动\(i\),向右移动\(j\),向上移动\(k\),向下移动\(t\),这个矩形内最多 ...
- [转]深入探讨C语言中局部变量与全局变量的作用域与存储类别
C语言中局部变量和全局变量变量的作用域与存储类别(auto,static,extern,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元, ...
- 如何直接修改cf,of等标志位的值?
如何直接修改 cf,of 等 标志寄存器位的值? 我记得在哪个教程里见过,但是不太记得了… 貌似是在yjx驱动教程里面… 我想弄这个的原因是想验证 网上查到的 各种跳转语句(ja,jl,jg等) 需要 ...