vue+node+mongodb实现的功能
用vue+node +mongodb实现前后台交互的页面代码,已经上传到github上,
地址是:
https://github.com/GainLoss/vue-node-mongodb
https://github.com/GainLoss/vue-manger
实现一个基本交互功能:http://www.cnblogs.com/GainLoss/p/6927626.html
踩过的坑:http://www.cnblogs.com/GainLoss/p/6929299.html
这次说的是在写这个页面的时候实现的功能:
一:增删改查
增加:使用的是save,因为使用的是post,所以是req.body.参数。如果是get方法的话,就是req.query.参数,res.send(你需要传给前台的数据)
router.post('/api/list/addlist', (req, res) => {
let newAccount = new models.home({
title: req.body.title,
time: new Date(),
sort: req.body.sort,
user: req.body.user,
con: req.body.con,
file:req.body.file,
});
newAccount.save((err, data) => {
if (err) {
res.send(err)
} else {
res.send('成功添加列表')
}
})
});
删除:一般删除的都是一个数据,并且这个数据自己有一个id参数,是唯一的,所以我们一般依据id利用remove进行删除
router.post('/api/seek/remove', (req, res) => {
models.seek.remove({ _id: { $in: req.body.id } }, (err, data) => {
if (err) {
res.send(err)
} else {
res.send(data)
}
});
})
修改(更新):更新用的是update,我们先根据id找到特定的数据,然后更新需要更新的参数
router.post('/api/data/detail/watch',(req,res)=>{
let id=req.body.id;
let cate=req.body.cate;
let watch=req.body.watch;
console.log(watch)
//添加查看的次数
models[cate].find({"_id":ObjectID(id)}).update({watch:watch},function(err,data){
if(err){
res.send(err)
}else{
res.send(data)
}
})
})
查:这个就比较简单了 想全部查询的话,我就只在对应的模型上进行find,当然需要具体情况具体分析
router.post('/api/data/detail',(req,res)=>{
let id=req.body.id;
let cate=req.body.cate;
//获取电影的详情
models[cate].find({"_id":ObjectID(id)},function(err,data){
if(err){
res.send(err)
}else{
res.send(data)
}
})
})
综合:对数据进行排序查找 并且有分页效果 limit:限制个数; skip:从第几个开始找;sort:-1逆序 1正序 并且有搜索的功能
//获取每个模块的列表信息
router.post('/api/model/query',(req,res)=>{
let offset=parseInt(req.body.offset);
let limit=parseInt(req.body.limit);
let name=req.body.name;
let model=req.body.model;
let sort=req.body.sort;
let obj={};
obj[sort]=-1;
if(name==''||name=="all"){
models[model].find().sort(obj).skip(offset).limit(limit).find((err,data)=>{
if(err){
res.send(err)
}else{
models[model].count((err,result)=>{
if(err){
res.send(err)
}else{
res.send({
body:{
rows:data,
size:limit,
total:result
}
})
}
})
}
})
}else{
models[model].find({name:name}).skip(offset).limit(limit).find((err,data)=>{
if(err){
res.send(err)
}else{
models[model].count((err,result)=>{
if(err){
res.send(err)
}else{
res.send({
body:{
rows:data,
size:limit,
total:result
}
})
}
})
}
})
} })
至此,完成对数据的增删改查,对数据的操作基本就是增删改查
二:实现前台的一些功能
1.点击某个列表中的数据进入详情页面
我设计的是详情页面是一个公共的组件,我们进入详情页面需要知道当前这个数据是哪个集合中,而且需要知道对应数据的id.在列表页面,我们需要将每个数据对应的id放在数据中的自定义属性中,点击进入详情页面的时候地址栏有当前数据属于的集合和对应的id
//列表页中每个数据加一个点击函数
onClickRow: function(row, $element) {
_this.$router.push({ name: 'Detail', query: { id: row._id, cate: 'news' } })
}
进入详情页面之后,执行这个函数,这个函数获取到当前地址栏上传过来的参数,然后调取后台数据
//获取详情页面
getData: function() {
var params = {
id: this.$route.query.id,
cate: this.$route.query.cate
};
this.$http.post("/api/data/detail", params).then((response) => {
if (response && response.status == 200) {
var result = response.body;
this.items = result;
this.watchNum = result[0].watch; }
})
},
2.从后台调取数据之后,在前台显示的例子。前台用的是vue-resource获取到result之后,将result中的数据传给在data中设置的一个数组,然后再html中将数组v-for
getData:function(sort){
var _this=this;
var params={
limit:8,
offset:0,
name:'',
model:this.message,
sort:sort
}
this.$http.post('/api/model/query',params).then((response)=>{
if(response){
var result=response.body.body.rows
for(var i=0;i<result.length;i++){
_this.data.push(result[i])
}
}
})
this.imgSrc='static/image/qt_sort/'+this.message+'.png'
},
3.对文件进行上传和展示 上传用的是multer 我的思路是在file的input改变的时候,调取后台文件上传的接口,然后存储文件,将文件的路径放在input上,在最终全部的数据提交的时候,一并将文件的路径提交上去,最后显示文件的时候,就那平常的参数那样写,但是需要注意的是img的src需要这样写<img :src="item.src"/>
html
<div>
<label class="custom-file-upload">
<input type="file" accept="image/png,image/jpg,image/jpeg,image/gif" name="myupload" id="uploadInput" v-on:change="uploadImage()"/>
</label>
</div>
js
uploadImage(){
var formData = new FormData();
var myfile = document.getElementById('uploadInput').files[0];
formData.append('fabricImage', myfile);
this.$http.post('/api/news/files/upload', formData).then(response=>{
console.log('succeed');
if(response&&response.status==200){
console.log(response.body)
this.fileName=response.body
console.log(result)
}
}).catch(err=>{
console.log(err)
});
},
后台api.js
// 引入处理路径的模块
const path = require('path');
const fs = require('fs');
var multer = require('multer');
var upload=multer({dest:'upload/'}); //文件上传
router.post('/api/movies/files/upload', upload.single('fabricImage'), function (req, res, next) {
var file = req.file;
//以下代码得到文件后缀
name = file.originalname;
nameArray = name.split('');
var nameMime = [];
l = nameArray.pop();
nameMime.unshift(l);
while (nameArray.length != 0 && l != '.') {
l = nameArray.pop();
nameMime.unshift(l);
}
//Mime是文件的后缀
Mime = nameMime.join('');
//重命名文件 加上文件后缀
//fs.renameSync('./upload/' + file.filename, './upload/' + file.filename + Mime);
fs.renameSync('./upload/' + file.filename, '../static/upload/' + file.filename + Mime);
var path='/static/upload/' + file.filename + Mime;
res.send(path);
})
=================还有很多小的细节,需要说明
vue+node+mongodb实现的功能的更多相关文章
- 后台管理系统:vue&node&MongoDB(一)
后台管理系统 使用工具: Vue Node Mongodb Element-ui 一.后台(Node+Mongodb) 前期准备: 需要下载的包: mongooes -------- ...
- 一个 Vue + Node + MongoDB 博客系统
源码 耗时半载(半个月)的大项目终于完成了.这是一个博客系统,使用 Vue 做前端框架,Node + express 做后端,数据库使用的是 MongoDB.实现了用户注册.用户登录.博客管理(文章的 ...
- vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口
菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...
- vue+node+mongodb前后端分离博客系统
感悟 历时两个多月,终于利用工作之余完成了这个项目的1.0版本,为什么要写这个项目?其实基于vuejs+nodejs构建的开源博客系统有很多,但是大多数不支持服务端渲染,也不支持动态标题,只是做到了前 ...
- vue+node+mongoDB前后端分离个人博客(入门向)
最近学习了VUE,自己为了学习做了个小小的博客,功能很简单,不过开发过程中也遇到了很多坑,所以记录下来方便以后使用.欢迎大家交流学习. 功能 实现了用户注册.登录.token检测登录.用户留言.个人中 ...
- 学习笔记:Vue+Node+Mongodb构建简单商城系统(一)
所需前置知识: HTML.CSS.JS.Vue.ES6.Npm.Webpack.Node.Express.Mongodb 项目整体架构: IDE:webstorm: 项目建立过程(cmd常用命令行指令 ...
- vue+node+mongoDB 火车票H5(六)---城市列表保存到MongoDB数据库并且启用node.js服务
把车站列表保存到数据库,并且从本地创建服务 node.js创建httpserver 1.搭建基于express的运行环境 全局安装express-gengerator cnpm install -g ...
- vue+node+mongodb实现的页面
源代码地址:https://github.com/GainLoss/vue-node-mongodb 目前这个项目实现的是: 1.利用vue-cli实现前台页面的编写 (1)页面的跳转利用的是vue- ...
- 学习笔记:Vue+Node+Mongodb 构建简单商城系统(二)
前面几个月工作有点忙,导致构建简单商城系统的计划搁置近三个月.现在终于有时间重新回过头来继续本计划.本篇主要记录自己在阿里云服务器上搭建node运行环境的整个过程,以及对其中遇到的一些问题的思考. 一 ...
随机推荐
- hdu1286 找新朋友 欧拉函数模板
首先这一题用的是欧拉函数!!函数!!不是什么欧拉公式!! 欧拉函数求的就是题目要求的数. 关于欧拉函数的模板网上百度一下到处都是,原理也容易找,这里要介绍一下另一个强势模板. 在这一题的讨论里看到的. ...
- PIE SDK矢量自定义渲染
1. 功能简介 PIE SDK中关于矢量渲染提供了多种方案,包括简单渲染.分级渲染.唯一值渲染,这几种渲染方式具有一定的通用性,可以满足用户绝大多数的需求. 当面对复杂的业务,当前渲染方案无法满足用户 ...
- web安全——文件上传
文件上传本身不是漏洞,但如果文件上传功能的限制出现纰漏,允许了不合法且影响网站安全的文件的上传 可以将不合法且影响网站安全稳定性的文件等内容上传的均为“文件上传漏洞” 黑方将文件上 ...
- 小程序 开发阶段请求网络报 不在以下 request 合法域名列表中
1.在工具栏右边,点开详情, 把图片最后一项选上,再重新编译一下项目就可以了. 2.管理员将需要使用的域名添加到小程序后台 1. 地址:http://mp.weixin.qq.com (需要请求的域名 ...
- 【Tensorflow】 Object_detection之配置Training Pipeline
参考:Configuring an object detection pipeline 1.config文件 配置好的config文件存放路径:object_detection/samples/con ...
- 突破Http协议
突破Http协议 我到不先说什么Http什么的,对于HTTP的彻底理解是http是应用层的一个程序,就像我们写的诸多客户端和服务器模型,我们可能为了可靠,为了方便数据的解析,我们在数据包中其实就是结构 ...
- 把linux图形启动界面修改成命令行界面
由于图形界面比较耗资源,需要把启动界面修改成命令行界面,怎么修改呢? 1.vim /etc/inittab 2.把id:5:initdefault:改成 id:3:initdefault: 3.重启即 ...
- 移动端本地 H5 秒开方案探索与实现
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 企业微信移动端项目中有需求要展示数据趋势的可视化图表,经过调研,最终决定以单页面 H5 来完成,对 APP 里的一些使用 H5 实现的功能模 ...
- C# 定制特性
一.初识特性 特性(attribute)是被指定给某一声明的一则附加的声明性信息. 设计类型的时候可以使用各种成员来描述该类型的信息,但有时候我们可能不太愿意将一些附加信息放到类的内部,因为这样,可能 ...
- 浅谈C#中HttpWebRequest与HttpWebResponse的使用方法
1.第一招,根据URL地址获取网页信息get方法 public static string GetUrltoHtml(string Url,string type) { try { System.Ne ...