数据库连接方法mongonDB

本文介绍了如何使用Koa2框架、MongoDB数据库以及相关插件(如session管理、CORS跨域处理和MongooseORM)来开发一个简单的API应用,包括数据库连接、用户认证、路由设置和基本数据操作。
摘要由CSDN通过智能技术生成

#开启数据库后台

mongod.exe  --dbpath  C:\MongoDB\data\db

#创建koa2  

没有koa2的先执行 npm i -g koa-generator

koa2 +名字,然后将起一个src文件夹,将其它文件放进src里

#安装session插件

npm i koa-generic-session  --save

const seetion=require('koa-generic-session')

app.use(session({
  cookie: {
    path: '/',
    httpOnly: true,
    maxAge: 24 * 60 * 60 * 1000 // 一天
  }
}))

#解决跨域 安装cors插件

npm i koa2-cors --save 

const cors=require('koa2-cors')

app.use(cors({
  origin:'http://localhost:8081',
  credentials:true
}))

#连接数据库

npm i mongoose --save

const mongoose=require('mongoose');
const url='mongodb://127.0.0.1:27017';
const dbName='comment2'

mongoose.connect(`${url}/${dbName}`).then(data=>{
    console.log("连接成功");
}).catch(ree=>{
    console.log('登录失败');

});

module.exports=mongoose

#定义Schema文件创建Schema.js

const mongoose=require('./db');

const resulSchema=mongoose.Schema({
    usename:{
        type:String,
        require:true,
        unique:true
    },
    password:String
})

const user=mongoose.model('uses',resulSchema)
module.exports={
    user
}

#创建一个返回统一格式的类

##成功状态

class Success{
    constructor(data={},code=200){
        this.code=code
        if(data!=null){
         this.data=data
        }
    }
}
module.exports={
    Success
}

##失败

class errors{
    constructor(message='erron',code=-1){
        this.code=code
        this.message=message 
    }
}
module.exports={
    errors
}

##统一放在一个文件里(index)

const SuccessModel = require('./SuccessModel')
const ErrorModel = require('./ErrorModel')

module.exports = { SuccessModel, ErrorModel }

#创建数据和路由的注册

创建一个hooks名字随便

const users=require('../Schemas/user')

async function createUser(username,Password){
    const user=await users.create({username,Password})
    return user
}
module.exports={
    createUser
}

注册路由

onst router = require('koa-router')()
const {createUser}=require('../conster/user')
const { Success, errors }=require('../res/index')
router.prefix('/api/user')

router.get('/Registr', async function (ctx, next) {
  const {username,Password}=ctx.requset.body
  try {
    const resdata=await createUser(username,Password)
    ctx.body=new Success(resdata)
  } catch (error) {
    /* 1001注册失败 */
    ctx.body=new errors(error,1001)
  }
})

module.exports = router

然后在app.js里写上

const users = require('./routes/users')
app.use(users.routes(), users.allowedMethods())

#写一个文件夹来创建中间件来判断是否已经登录

文件名可以叫check/loginCheck

module.exports = async (ctx, next) => {
    const session = ctx.session
    if (session && session.userInfo) {
        await next()
        return
    }
    ctx.body = {
        errno:-1,
        message:'登录验证失败'
    }
}

要是路由需要验证是否登录才能被请求到数据这样子写

// 创建收货地址 这里是用logincheck也就是路径旁边加上
const loginCheck = require('../middleware/loginCheck') //文件名组件随便起

router.post('/', loginCheck, async function (ctx, next) {
    const userInfo = ctx.session.userInfo
    const username = userInfo.username
    const data = ctx.request.body || {} // 前端传来的数据

    // 创建数据
    try {
        const newAddress = await createAddress(username, data)
        ctx.body = new SuccessModel(newAddress)
    } catch (ex) {
        console.error(ex)
        // 返回失败
        ctx.body = new ErrorModel(10004, `创建地址失败`)
    }

})

数据库的增删改成

// nodejs 连接 mongodb
// 体会 nodejs 连接 mongodb 的能力,不会真正的用到路由上
// mongoose 对接路由的功能

const MongoClient = require('mongodb').MongoClient

const url = 'mongodb://localhost:27017' // 本地启动的 mongodb 服务
const dbName = 'comment1' // 数据库(留言板项目的数据库 )

MongoClient.connect(url, {
    useUnifiedTopology: true,
    useNewUrlParser: true
}, (err, client) => {
    if (err) {
        console.error('mongodb 连接出错', err)
        return
    }
    console.log('mongodb 连接成功')

    // 切换数据库 database
    const db = client.db(dbName)

    // 切换到指定的集合 collection
    const userCollection = db.collection('users')

    // // 查询数据
    // userCollection.find().sort({ _id: -1 }).toArray((err, result) => {
    //     if (err) {
    //         console.error('查询数据出错', err)
    //         return
    //     }
    //     console.log('查询结果', result)
    // })

    // // 新增数据
    // userCollection.insertOne({
    //     username: 'shuangyue',
    //     password: 'abc',
    //     age: 30,
    //     city: 'beijing'
    // }, (err, result) => {
    //     if (err) {
    //         console.error('插入数据出错', err)
    //         return
    //     }
    //     console.log('插入后的返回结果', result.insertedCount, result.insertedId)
    // })

    // // 修改数据
    // userCollection.updateOne(
    //     { username: 'zhangsan' }, // 修改的条件
    //     { $set: { age: 21 , city: 'beijing'} }, // 修改的内容
    //     (err, result) => {
    //         if (err) {
    //             console.error('修改数据出错', err)
    //             return
    //         }
    //         console.log('修改后的返回结果', result.modifiedCount)
    //     }
    // )

    // 删除数据
    userCollection.deleteOne({ username: 'wangwu' }, (err, result) => {
        if (err) {
            console.error('删除数据出错', err)
            return
        }
        console.log('删除成功')
    })

    // 关闭
    // client.close()
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值