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 ...
随机推荐
- 【转-mysql索引失效的几种情形】
索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件 ...
- 【关于msyql5.6创建存储过程的一些记录】
-- 秒杀执行存储过程DELETE $$ -- console的结束符号由;转换成 $$-- in输入参数:out:输出参数-- ROW_COUNT():返回上条dml影响的条数: 小于0:sql语句 ...
- 2017-11-7 NOIP模拟赛
1.数学老师的报复 #include<iostream> #include<cstdio> using namespace std; int cnt; ]; long long ...
- Git 撤销中间某次的提交记录
今天遇到一个问题,一周前一位同事把非发布代码合并到发布分支上并已发布线上,在这个提交点后已经有了很多次的提交记录,所以不能直接回滚,使用到了gIt提供的revert.以此记录. git revert ...
- Docker容器构建过程的安全性分析
来源:嘶吼专业版 ID:Pro4hou DevOps概念的流行跟近些年微服务架构的兴起有很大关系,DevOps是Dev(Development)和Ops(Operations)的结合,Dev负责开发, ...
- Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在
Jdk12 都发布了, 我也下载一个玩一玩吧.刚准备要下载,发现之前已经下载了一个11, 那就11 吧,也不用太新了. 安装了jdk11,习惯性的设置了一下环境变量: JAVA_HOME=D:\too ...
- thinkphp5更新时验证数据
在编辑页面form表单中添加一个隐藏域:<input type="hidden" name="表中id字段名" value="get方式传过来的 ...
- 解决element-ui中el-menu组件作为vue-router模式在刷新页面后default-active属性与当前路由页面不一致问题的方法
解决办法是给menu的default-active绑定route.path形如:<el-menu :default-active="$route.path" ...>每 ...
- JMETER断言:终极指南
你想要: 检查服务器响应是否包含特定字符串, 或验证服务器返回了HTTP 200 OK, 或者检查json字段的值(使用类似JsonPath$.store..price). 断言是要走的路. 问题是: ...
- Silverlight 登陆界面
美术水平有限,不喜勿喷. 界面代码,效果如下图 <UserControl x:Class="ElecDemoTelerikSL.Login" xmlns="http ...