美文网首页
node.js 学习笔记 08

node.js 学习笔记 08

作者: GodlinE | 来源:发表于2017-06-22 16:03 被阅读0次

    mongoose 的使用

    //导入包
    var mongoose = require("mongoose");
    //链接数据库
    mongoose.connect('mongodb://localhost:27017/test2');
    //创建一个类
    //使用 model 方法,这个方法需要两个参数
    //第一个参数表示类的名称
    //第二个参数表示概要
    //这个概要是一个字典(对象),这个对象可以放置创建的类所需要的属性
    //这个 schema 中放置属性,需要给每一个属性设置对应的数据类型
    //所以这个对象中的 Key 值表示对应的属性,value 表示属性的数据类型
    var Cat = mongoose.model('Cat',{name:String});
    //实例化一个对象
    var tom = new Cat({'name':'tom'});
    //把这个对象持久化,就是把这个对象保存到数据库中
    tom.save(
        function(err){
            console.log(err);
        }else{
            console.log('maomao');
        }
    );
    //使用 find 方法查询
    // mongoose 的结构是 数据库 类(集合) 对象(文档)
    //第一个参数表示条件,第二个参数表示回调
    Cat.find({'name':'tom'},function(err,result){
        console.log(result);
        var findObj = result[0];
        findObj.name = 'mimi';
        findObj.save();
    })
    

    使用 schema 设置实例方法

    var mongoose = require('mongoose');
    mongoose.connect ('mongodb://localhost:27017/test2');
    var db = mongoose.connection;
    //判断是否链接有错误和判断数据库是否打开,两者判断一个就可以
    db.once('open',function(){
        console.log('opened');
    })
    //使用 Schema 创建一个模型
    //如果采用下面的写法来创建对应的模型,一般只能设置属性
    //没有办法舒勇 schema 设置方法,所以我们一般会独立创建一个 schema 对象
    //这样既可以设置属性,也可以设置方法
    var blogSchema = mongoose.Schema({
        'title':String,
        'author':String,
        'time':Date,
        'body':String,
        'comment':[{'body':String,'commentTime':Date}]
    })
    //当类的模型设置好以后,我们就可以又一个方法,所以我们需要使用 schema 来设置对应的方法
    //我们设置一个实例方法
    //methods 表示对象方法就是实例方法
    //当使用 schema 扩展方法后,每一个对应的实例就会有这个方法,所以里面的 this 表示实例对象
    blogSchema.methods.showInfo = function(){
        console.log(this.title);
    };
    var Blog = mongoose.model('Blog',blogSchema);
    //保存实例
    var myBlog = new Blog({
        'title':'今天大家不要睡觉,不要打豆豆',
        'author':'大家',
        'time':new Date();
        'body':'asiejhhlkjhflkjqhwlksjdhc',
        'comment':[{'body':'dfhoiuwhoiuhc','commentTime':new Date()}]
    });
    myBlog.save();
    myBlog.showInfo();
    
    • 保存实例的另一种格式
    Blog.create({
        'title': '今天大-家不要睡觉,.可以写代码',
        'author': '大家1',
        'time': new Date(),
        'body': 'fafdsafdasfdasfasdk;fjas;l',
        'comment': [{'body': 'dasfdasfdasf', 'commentTime': new Date()}]
    })
    
    var mongoose = require('mongoose');
    mongoose.connect('mongodb://locakhost:27017/test2');
    var db = mongoose.connection;
    db.once('open',function(){
        console.log('open');
    });
    //设置一个动物的 schema
    var animteShema = mongoose.Schema({
        'name':String,
        'type':String
    })
    //因为我们需要给设置调用一个方法,所以我们需要在 schema 中扩张一个实例方法
    //需要一个参数,这个参数第一个回调,用来把找到的数据传递出去
    animteShema.methods.findSameType = function(callBack){
        //我们需要使用类来查找符合条件的东西
        this.model('Aimate').find({'type':this.type},function(){
            callBack(err,result);
        })
    };
    //使用 schema 设置对应的动物类
    var Animate = mongoose.model('Animate',animteSchema);
    //创建多个动物保存在数据库中
    Animate.create({
        'name':'tom',
        'type':'cat'
    });
    Animate.create({
        'name':'mimi',
        'type':'cat'
    });
    Animate.create({
        'name':'xaiobai',
        'type':'dog'
    });
    Animate.create({
        'name':'xiaohang',
        'type':'dog'
    })
    //查找名称是 tom 的猫
    Animate.findOne({'name':'tom'},function(err,resulte){
        //result 表示的是一个实例
        console.log(result);
        //当找到后,查找和他同一类型的所有的
        //我们可以把查找同一类型的过程封装成一个函数,这个函数由 result 这个实例来调用
        var findObj = resulte;
        findObj.findSameType(function(err,result){
            console.log(result);
        })
    })
    

    微博查询

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost:27017/test2');
    var db = mongoose.connection;
    db.once('open',function(){
        console.log('opened');
    });
    var blogSchema = mongoose.Schema({
        'title':String,
        'author':String,
        'body':String,
        'comments':[{'body':String,'comTime':Date}]
    })
    //设置一个实例方法,第一个参数表示评论,第二个参数回调
    blogSchema.methods.showMyCon = function(comObj,callBack){
        this.comments.push(comObj);
        this.save();
    };
    var Blog = mongoose.model('Blog',blogSchema);
    var myBlog = new Blog({
        'title':'我要吃饭了',
        'author':'大家',
        'body':'红烧肉,黄焖鸡米饭',
        'comments':[{'body':'dasfasdf','comTime':new Date()}]
    });
    //添加持久
    myBlog.save();
    Blog.findOne({'title':'我要吃饭了'},function(err,blog){
        if(!blog){
            //没有值就返回停止
            return;
        }
        //发表评论,设置成一个函数,就是我们获取到的 blog 来调用
        //需要使用 schema 设置一个实例方法
        blog.showMyCon({'body':'我也要吃饭了','comTime':new Date()});
    })
    

    课程表设置

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://locallhost:27017/test3');
    var db = mongoose.connection;
    db.once('open',function(){
        console.log('open');
    })
    //设置课程的 schema
    //每一学生就是一个对象,所以我们可以使用一个学生的 schema 来设置学生对象
    var studentSchema = mongoose.Scheme({
        'name':String,
        'age':Number,
        'sec':String
    })
    //设置一个方法,用来表示让小明的年龄加一岁
    studentSchema.methods.addOneYear = function(){
        this.age ++;
        this.save();
    }
    var curseSchema = mongoose.Schema({
        'name':String,
        'students':[studentSchema]
    })
    //添加一个添加学生的方法
    curseSchema.methods.addStudent = function(stuObj){
        this.students.push(stuObj);
        this.save();
    }
    //创建学生和课程的模型
    var Student = mongoose.model('Student',studentsSchema);
    //添加一个查找学生的方法
    curseSchema.methods.findStu = function(num,callBack){
        Student.findOne({'name':this.students[num].name},function(err,result){
            callBack(err,result);
        })
    };
    var Curse = mongoose.model('Curse',curseSchema);
    //分别创建学生的实例和课程实例
    var xiaoming = new Student({'name':'xiaoming','age':12,'sex':'man'});
    xiaoming.save();
    var chinese = new Curse({
        'name';'chinese'
    });
    chinese.save();
    //当小明如果选取了chinese,那么就给这个课程添加小明这个学生
    //当查找到课程的名称是 chinese 的时候我们就给当前的课程添加小明这个学生
    /**Curse.findOne({'name';'chinese'},function(err,curse11){
        if(!curse11){
            return;
        }
        需要使用当前的课程添加学生,所以给课程的 schema 添加一个方法
        curse11.addStudent(xiaoming);
    })
    **/
    chinese.addStudent(xiaoming);
    //当我找到小明后,让小明的年龄长大一岁
        Student.findOne({'name':'xiaoming'},function(err,stu11){
            //让小明的年龄加一
            stu11.addOneYear();
        })
    
    //当我们找到对应的课程的名称是 chinese 后,然后在对应的选取这个课程的学生
    Curse.findOne({'name':'chinese'},function(err,curseC){
        if(!curseC){
            return;
        }
        curseC.findStu(0,function(err,result){
            console.log(result);
        })
    })
    

    创建静态方法

    var Student = require('./models/Student.js');
    var db = require('./models/db.js');
    //静态方法使用Student来调用
    //首先插入数据
    Student.create({'name':'xiaoming12','age':18,'sex':'man_woman'});
    //查找
    Student.findData({},function (err, result) {
        console.log(result);
    
    })
    

    模块化

    • Student.js
    var mongoose = require('mongoose');
    
    //设置一个schema
    var studentSchema = new mongoose.Schema({
        'name':String,
        'age':Number,
        'sex':String
    })
    //设置一静态方法
    //设置两个参数,第一个参数条件,第二个表示回调
    studentSchema.statics.findData = function (json,callBack) {
        //找到模型然后设置find方法
        this.model('Student').find(json,callBack);
        
        
    }
    //使用schema创建模型
    var Student = mongoose.model('Student',studentSchema);
    
    //传递Student
    module.exports = Student;
    
    • db.js
    /**
     * Created by Administrator on 2017/6/21.
     */
    
    //用来设置和数据库之间的连接,为了以后开发的灵活性
    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost:27017/test33');
    var db = mongoose.connection;
    db.once('open',function () {
        console.log('open');
    
    });
    //把这个db传递出去,传一个对象
    module.exports = db;
    
    
    • app.js
    var express = require('express');
    var Student = require('./models/Student.js');
    var db = require('./models/db.js');
    //设置渲染
    var app = express();
    app.set('view engine','ejs');
    
    //设置路由处理
    //获取student中的梭有的数据
    // var rsult = []
    
    
     Student.find({},function (err,result) {
    
         app.get('/',function (req,res) {
    
    
             //渲染界面
             res.render('index',{
                 result:result
             })
    
    
    
    
         })
    
    
    
     });
    
    // app.get('/',function (req,res) {
    //     res.render('index',{
    //         result:results
    //     })
    //    
    // })
    app.listen(3000);
    
    

    webSocket

    //使用原生的node渲染界面
    var http = require('http');
    var fs = require('fs');
    var server = http.createServer(function (req,res) {
        if(req.url == '/'){
            //读取文件
            fs.readFile('./index.html',function (err,data) {
    
                res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
    
                res.end(data);
    
            })
        }
    });
    var socket =require('socket.io')(server);
    //当接受到对应的请求我们回复信息
    socket.on('connection',function (socket) {
        console.log('我接受到了一个连接');
    
        //做处理
        //当接受到客户端的一些信息后我就做出处理
        socket.on('tiwen',function (mes) {
            //mes:表示提问时候的信息
            //接受提问后给对应的客户端回复
            console.log(mes);
            socket.emit('reply','我已经给你回复了');
        })
    })
    
    server.listen(3000,'127.0.0.1');
    

    webScoket 画板

    • app.js
    /**
     * Created by Administrator on 2017/6/21.
     */
    
    //使用原生的node渲染界面
    var http = require('http');
    var fs = require('fs');
    var server = http.createServer(function (req,res) {
        if(req.url == '/'){
            //读取文件
            fs.readFile('./huaban.html',function (err,data) {
    
                res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
    
                res.end(data);
            })
        }
    });
    var socket =require('socket.io')(server);
    //当接受到对应的请求我们回复信息
    socket.on('connection',function (socket) {
        console.log('我接受到了一个连接');
    
        //做处理
        //当接受到客户端的一些信息后我就做出处理
        socket.on('hua',function (msg) {
            //mes:表示提问时候的信息
            //接受提问后给对应的客户端回复
            // console.log(mes);
            // socket.emit('huida',mes);
            socket.emit('huida',msg);
        })
    })
    server.listen(3000,'127.0.0.1');
    
    • html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
            canvas{
                border: 1px solid #000;
            }
        </style>
    </head>
    <body>
        <canvas width="1000" height="1000" id="canvas"></canvas>
    
        <script type="text/javascript" src="/socket.io/socket.io.js"></script>
        <script type="text/javascript">
            var canvas = document.getElementById("canvas");
            var ctx = canvas.getContext("2d");
    
            var color = ["red","blue","green","black","skyblue","pink","white"];
    
            var mycolor = color[parseInt(Math.random() * color.length)];
    
            canvas.onmousedown = function(){
                canvas.addEventListener("mousemove", handler, true); 
            }
    
            canvas.onmouseup = function(){
                canvas.removeEventListener("mousemove", handler, true);
            }
    
            function handler(e){
                ctx.beginPath();
                ctx.arc(e.pageX,e.pageY,20,0,Math.PI*2,true);
                ctx.fillStyle = mycolor;
                ctx.fill();
    
                //触发事件
                socket.emit("hua",{"x":e.pageX,"y":e.pageY,"color":mycolor});
            }
    
            var socket = io();
             
            socket.on("huida",function(msg){
                ctx.beginPath();
                ctx.arc(msg.x,msg.y,20,0,Math.PI*2,true);
                ctx.fillStyle = msg.color;
                ctx.fill();
            });
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:node.js 学习笔记 08

          本文链接:https://www.haomeiwen.com/subject/hjbxcxtx.html