node.js 学习笔记 08

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 不支持上传文件,所以就复制过来了。作者信息什么的都没删。对前端基本属于一窍不通,所以没有任何修改,反正用着没问题就...
    全栈在路上阅读 1,952评论 0 2
  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,674评论 2 32
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,099评论 0 7
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,058评论 1 10
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 3,940评论 3 40