zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    Android Sqlite 增删改查
    Android SQLiteOpenHelper Sqlite数据库升级onUpgrade
    Android SQLiteOpenHelper Sqlite数据库的创建与打开
    Android Xml,PullParser,解析
    Android Xml文件生成,Xml数据格式写入
    Android Studio生成get,set,tostring,构造方法
    Android SharedPreference
    Android 文件模式
    Android 权限的由来
    C++ essentials 之 union
  • 原文地址:https://www.cnblogs.com/GainLoss/p/6927626.html
Copyright © 2011-2022 走看看