koa2项目连接mongdb数据库

3 篇文章 0 订阅

1.数据库连接 

npm i mongoose

config/index.js中:

module.exports = {
    URL: "mongodb://127.0.0.1:27017/vue-admin"
}

config/db.js:注意移入文件路径问题

const mongoose = require("mongoose") 
const logger = require("../utils/log4js");
const dbConfig = require("./index");
 
//连接数据库
mongoose.connect(dbConfig.URL);

const db = mongoose.connection
 
// db.on('open', () => {
//     logger.info("*****数据库状态为开启******")
//   })

// 连接成功
db.on("connected", function () {
    logger.info("**********数据库连接成功***********");
})
// 连接失败
db.on("error", function (err) {
    logger.info("数据库连接失败,原因:" + err);
})
// 连接断开
db.on('disconnectied', function () {
    logger.info("数据库连接断开,原因:" + err);
})

app.js中引入db.js文件即可连接到数据库

// 引入数据库配置
require('./config/db')

2.mongoose连接使用

1.编写schema:字段名有无引号都行

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const usersSchema = new Schema({
    // _id : 605d8f81e1ed264a867cfcc2,
    // 数组可以直接使用[],也可以使用Array
    "deptId" : [],
    "state" : Number,
    "role" : Number,
    "roleList" : [],
    "createTime" : { type: Date, default: Date.now },
    "lastLoginTime" : { type: Date, default: Date.now },
    "userId" : Number,
    "userName" : String,
    "userPwd" : String,
    "userEmail" : String,
    "job" : String,
    "mobile" : String,
    // 留一个备用的字段
    "remark": String
  });

//   要把 schema 转换为一个 Model, 使用 mongoose.model(modelName, schema) 函数:
const users = mongoose.model('users', usersSchema);
  module.exports = users;

2.使用Model和mongoose

注意:查询语句形式;返回数据不能直接返回,需要返回res._doc否则会报错

const router = require('koa-router')()
const comm = require("../utils/common");
const logger = require("../utils/log4js");
const jwt = require("../utils/token");
const md5 = require("md5");
const User = require("../model/userSchema");

router.prefix('/users')

router.post('/login', async (ctx, next) => {
  let { userName, userPwd } = ctx.request.body;

  if(userName == '' || userPwd == '') return comm.error(comm.CODE.PARAM_ERROR,{},'用户名和密码不能为空' );

  // 查询数据库用户名是否存在,通过md5对用户密码进行md5()加密和和数据库进行查询
  try {
    // 后面是要查询的字段
      let loginUser = await User.findOne({ userName,  userPwd: md5(userPwd)}, 'userId userName userEmail job mobile deptId state role roleList')
      console.log(loginUser._doc,"loginUser");
      if(loginUser){
        //报错: TypeError: Converting circular structure to JSON,starting at object with constructor 'MongoClient'
        // 解决: mongoose不能直接返回loginUser,需要返回res._doc
        // 设置token: 使用用户名和密码设置token 
        const data = loginUser._doc;
        let token = jwt.setToken({userName, userPwd});
        
        data.token = "Bearer " + token
        ctx.body = comm.success(comm.CODE.SUCCESS, data, '登录成功')
        logger.info(userName+"登录成功");
      }
      
  } catch (error) {
    ctx.body = comm.error(comm.CODE.BUSINESS_ERROR,{}, error)
    logger.error(userName+"尝试登录失败:"+error);
  }
})

module.exports = router

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,你可以使用koa2框架与mysql2库连接和操作数据库。下面是一个简单的示例: 首先,你需要安装所需的依赖: ``` npm install koa koa-router koa-bodyparser mysql2 ``` 然后,在你的项目中创建一个数据库连接配置文件(比如config.js),并填写数据库的相关信息: ```javascript // config.js module.exports = { database: 'your_database_name', username: 'your_username', password: 'your_password', host: 'your_host', port: 'your_port' }; ``` 接下来,创建一个数据库连接池并导出供其他模块使用: ```javascript // db.js const mysql = require('mysql2/promise'); const config = require('./config.js'); const pool = mysql.createPool({ host: config.host, port: config.port, user: config.username, password: config.password, database: config.database, connectionLimit: 10 // 可以根据需要进行调整 }); module.exports = pool; ``` 最后,在你的路由文件中使用数据库连接池来执行查询和操作: ```javascript // routes.js const Router = require('koa-router'); const pool = require('./db.js'); const router = new Router(); router.get('/users', async (ctx) => { try { const [rows] = await pool.query('SELECT * FROM users'); ctx.body = rows; } catch (err) { console.error(err); ctx.status = 500; ctx.body = 'Error occurred while fetching users'; } }); // 其他路由和操作 module.exports = router; ``` 这只是一个简单的示例,你可以根据自己的需求进行更复杂的数据库操作。记得在需要使用数据库连接的地方引入连接池,并根据需要执行查询、插入、更新等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值