阅读 209

Koa2编写基本后端接口(二)

这是我参与新手入门的第3篇文章

MongoDB

接触过 Node.js 的基本也接触过这个数据库,对前端来说比较容易上手,搭配mongoose插件上手成本很低。

安装

yarn add mongoose
复制代码

基本使用:

// 引入并连接数据库
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

// 定义一个Schema
const kittySchema = mongoose.Schema({
  name: String
})

// Schema编译为一个Model
const Kitten = mongoose.model('Kitten', kittySchema);

// 通过new实例化
const felyne = new Kitten({ name: 'Felyne' });
// 通过model实例操作数据库的增删改查
// felyne.find()...
复制代码

由上可见mongoose的配置包括三大部分:connectModelsSchema

connect:用于创建数据库连接

Schema:Schema主要用于定义MongoDB中集合中数据的结构以及对于数据库中字段的定义。

Models:Models 是从 Schema 编译来的构造函数。 它们的实例就代表着可以从数据库保存和读取的 documents。 从数据库创建和读取 document 的所有操作都是通过 model 进行的。简单说就是model是由schema生成的模型,可以对数据库的操作。

controllers

因为接口多了后代码会很乱,所以这里遵循模块化思想,业务逻辑不在 router 中处理,将路由的回调函数单独抽离在controllers文件中。

// controllers
const services = require('../services')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcrypt')

function register(ctx, next) {
  const { username, password } = ctx.request.body
  const user = await services.getUserByName(username)
  if (user) {
    ctx.body = {
      code: 200,
      message: '用户名已存在',
    }
  } else {
    const pwdHash = bcrypt.hashSync(password, 10)
    const result = await services.addUser({ username, password: pwdHash })
    if (result) {
      ctx.body = {
        code: 200,
        message: '注册成功',
      }
    }
  }
  next()
}

module.exports = {
  register
}
复制代码

services

controllers 中只做业务处理,对于数据库的操作放在services文件中。

//services
const Users = require('../models/user')

async function getUserByName(username) {
  return await Users.findOne({ username })
}

async function addUser(user) {
  return await Users.create(user)
}

module.exports = {
  getUserByName,
  addUser
}
复制代码
文章分类
前端
文章标签