node 接口圈鉴 MongoDB

144 阅读1分钟

Koa搭建

const Koa = require('koa');
const Router = require('koa-router')
const userRouter = require('./routers/users.js')
const userRoles = require('./routers/roles.js')
const mongoose =require('mongoose')
const koaBody = require("koa-body")

mongoose.connect(
  "mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false"
);
var db = mongoose.connection;
db.on("error", console.error.bind(console, "链接失败!!!"));
db.once("open", function () {
  console.log("链接成功!!!");
});

// 实例化
const app = new Koa();
const router = new Router();

router.get('/', async ctx => {
  ctx.body = '你好! '
})
router.use(koaBody())
router.use(userRouter)
router.use(userRoles)


app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
  console.log('你好,我正在监听3000的端口号')
})

参数

const Router = require("koa-router");
const router = new Router({ prefix: "/users" }); 

const {
  getUserList,
  getUser,
  createUser,
  updateUser,
  deleteUser,
  login
}=require('../controllers/usersControllers')

const {auth,hasLimit}=require('../middleware/usersMiddleware')

router.get('/',getUserList)
router.get('/:id',auth,getUser)
router.post('/reg',createUser)
router.put('/:id',auth,updateUser)
router.delete('/:id',auth,hasLimit,deleteUser)
router.post('/login',login)


module.exports = router.routes();

格式

const mongoose = require('mongoose');
const {Schema,model}=mongoose;
const usersSchema=new Schema({
    // __v:{type:String,select:false},
    name:{type:String,require:true},
    
    password:{type:String,require:true},
    rolesId:[{
        type:Schema.Types.ObjectId,
        ref:"Roles"
    }],
    date:{type:Date,default:Date.now}
})
module.exports=model("Userss",usersSchema)

类型

// 获取用户列表
const Users = require('../models/usersSchema.js')

const jwt = require('jsonwebtoken');
const { secretKey } = require('../utils/Keys')

// 获取用户列表
const getUserList = async ctx => {
  ctx.body = await Users.find();
}

// 获取某一个用户
const getUser = async ctx => {
  // console.log(ctx.params.id)
  const user = await Users.findById(ctx.params.id);
  if (!user) {
    ctx.throw(404, '用户不存在')
  }
  ctx.body = user
}

// 新增一个用户
const createUser = async ctx => {
   console.log(ctx.request.body);
  let { name } =  ctx.request.body;
  console.log(name);
  const user = await Users.findOne({ name }).populate('rolesId');
  if (user) {
    ctx.throw(405, '已存在该用户!!!')
  } else {
    ctx.body = await new Users(ctx.request.body).save();
  }
}

// 修改一个用户
const updateUser = async ctx => {
  let { id } = ctx.params
  const user = await Users.findByIdAndUpdate(id, ctx.request.body);
  if (!user) { ctx.throw(404, '用户不存在!!!') }
  ctx.status = 200
  ctx.body = { msg: '修改成功' }
}

// 删除一个用户
const deleteUser = async ctx => {
  try {
    const user = await Users.findByIdAndDelete({ _id: ctx.params.id })
    ctx.body = user
  } catch (error) {
    ctx.throw(404, '用户不存在!!!');
  }
}

// 登录接口
const login = async ctx => {
  const user = await Users.findOne(ctx.request.body).populate('rolesId');
  if (!user) { ctx.throw(401, '用户名或者密码输入错误!!!') }
  const { name, pwd, rolesId} = user
  console.log(user,1111)
  const token = jwt.sign({ name, pwd,rolesId }, secretKey, { expiresIn: '24h' });
  ctx.body = { msg: '登录成功!!!', token }
}

module.exports = {
  getUserList,
  getUser,
  createUser,
  updateUser,
  deleteUser,
  login
}

image.png