koa2项目连接mongdb数据库

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

猜你喜欢

转载自blog.csdn.net/qq_34569497/article/details/134718482
今日推荐