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);
})
模块化
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;
/**
* 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;
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 画板
/**
* 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');
<!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>