使用mongoose操作数据库

在前一节中,我们已经将项目跑起来了。这节我们来使用mongoose来操作MongoDB,通过之前的的章节想必大家都在安装起了MongoDB,并了解了一点点基本使用。关于mongoose的基本使用可以查看Node操作MongoDB数据库

连接数据库

在连接数据库之前当然是先开启数据库了。如果忘了怎么开启,回过头去看看(温故而知新)

index.js

...
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/blog')

在项目中,代码与配置分离是一种很好的做法。可以很方便我们的更改,同时在开发阶段、测试阶段、线上部署等阶段使用不同的配置。关于如何针对不同环境使用不同配置,后面再说

我们先在config文件夹下建一个config.js

module.exports = {
  port: process.env.PORT || 3000,
  session: {
    key: 'blog',
    maxAge: 86400000
  },
  mongodb: 'mongodb://localhost:27017/blog'
}

现在在index.js中直接引入config.js 使用即可

...
const mongoose = require('mongoose')
const CONFIG = require('./config/config')
mongoose.connect(CONFIG.mongodb)
..

设计Schema

现在我们以下节要讲的用户登录注册为例来设计用户模型,并生成Model。 model是由schema生成的模型,可以对数据库的操作

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

const UserSchema = new Schema({
  name: {
    type: String,
    required: true,
    unique: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  password: {
    type: 'string',
    required: true
  },
  meta: {
    createAt: {
      type: Date,
      default: Date.now()
    }
  }
})

module.exports = mongoose.model('User', UserSchema)

使用model

routes 目录下新建一个user.js 用来实现用户注册登录等。如下,为了演示使用mongoose操作数据库,我们新建了一个用户

const UserModel = require('../models/user')

module.exports = {
  async signup (ctx, next) {
    const user = {
      name: 'liuxing'
      email 'chn.liuxing@gmail.com'
      password: '123456'
    }
    const result = await UserModel.create(user)
    ctx.body = result
  },
}

添加一个GET /signup 路由,查看数据库可以看见刚刚新建的这个用户

在这儿,我们把数据写死了,没有从表单获取数据,也没有对密码加密。详细的登录注册我们下一节再讲。