当前位置: 首页 > 工具软件 > api.yike.io > 使用案例 >

Mongodb和socket.io的使用经验

刘兴修
2023-12-01

1.mongoose

1.安装mongoose

mongose 是一种以关系性数据库的思想来设计非关系性数据库

npm i mongoose

2.引入mongoose 并连接数据库

const mongoose = require("mongoose")
mongoose.connect('mongodb://localhost/test')
localhost默认使用(27017) 可用127.0.0.1:27017
mongoose.connect('mongodb://username:password@host:port/database)

3.监听连接情况

Connection是数据库连接对象,专门负责连接的

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
    console.log("连接数据库yike成功")
});

4.定义Schema 设计表

var Schema = moogoose.Schema
var  UserSchema = new Schema({
    name:String,
    age:Number,
    status:Number
})

5.定义数据库模型 操作数据库

注意Model第一个参数一定要首字母大写

要和数据表(集合名字对应)

默认这个模型会和模型名称相同的复数的数据库表建立连接

如果你设置第三个参数,会和第三个参数的表建立连接

var User = db.Model(“User”,UserSchema)

6.API

find()查询所有数据

User.find({},function(err ,doc){
    if(err){
        console .log(err);
        return ; 
        console.log(doc);
    })

save() 添加一条数据

var u=new User({
    name :
    李四,
    age: 20 
    status :1
});
u.save( function(err){
    if(err){
        console. log(err);
        return;
    });

findOneAndUpdate() 查询一条数据并修改它

User.findOneAndUpdate(data,updata,(err,result)=>{})

countDocuments() 查询并返回匹配数目

User.countDocuments(wherestr, (err, result) => {
        if (err) {
            res.send({ status: 500 })
        } else {
            res.send({ status: 200, result })
        }
    })

updateOne() 修改数据

let wherestr = { userID: data.uid, friendID: data.fid }
let updatestr = { markname: data.name }
Friend.updateOne(wherestr, updatestr, (res, result) => {
    if (err) {
        res.send({ status: 500, state: "修改失败 " })
    } else
        res.send({ status: 200, state: "修改成功", result })
})

updateMany() 修改多个数据

let wherestr = { $or: [{ userID: data.uid, friendID: data.fid }, { userID: data.fid, friendID: data.uid }] }
let updatastr = { state: 0 }
Friend.updateMany(wherestr, updatastr, (err, result) => {
    if (err) {
        res.send({ status: 500 })
    } else {
        res.send({ status: 200 })
    }
})

deleteMany() 删除多个数据

let wherestr = { $or: [{ userID: data.uid, friendID: data.fid }, { userID: data.fid, friendID: data.uid }] }
Friend.deleteMany(wherestr, (err, result) => {
    if (err) {
        res.send({ status: 500 })
    } else {
        res.send({ status: 200 })
    }
})

2.socket.io

weapp.socket.io 客户端

在main主文件中

引用 weapp.socket.io

const io = require(“weapp.socket.io”)

const socket = io(“http://后端地址”)

挂载实例并引用

Vue.prototype.socket = socket

socket.io 服务端

引入io并设置端口

const io = require(“socket.io”)(端口)

定义一个变量存贮用户数据

监听与客户端的连接事件

//进入聊天的用户新id
var users = {}
io.on('connection', (socket) => {
    有个登录事件 会给每个用户赋值并保存
    //用户登录注册id
    socket.on("login", (id) => {
            //返回的是socket的新id
            // socket.emit("login", socket.id)
            socket.name = id
            users[id] = socket.id
        })
    发送信息会找到好友id去发送
        //用户发送信息
    socket.on("msg", ({ msg, uid, type, fid }) => {
        console.log(msg)
            //回复好友客户端
        socket.to(users[fid]).emit('msg', msg, uid, fid, type)
    })
	离开时会删除自己的信息
    //用户离开
    socket.on("disconnecting", () => {
        users.hasOwnProperty(socket.name) && delete users[socket.name]
    })
})
 类似资料: