使用mongoose操作数据库

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

连接数据库

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

index.js

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

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

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

  1. module.exports = {
  2. port: process.env.PORT || 3000,
  3. session: {
  4. key: 'blog',
  5. maxAge: 86400000
  6. },
  7. mongodb: 'mongodb://localhost:27017/blog'
  8. }

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

  1. ...
  2. const mongoose = require('mongoose')
  3. const CONFIG = require('./config/config')
  4. mongoose.connect(CONFIG.mongodb)
  5. ..

设计Schema

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

  1. const mongoose = require('mongoose')
  2. const Schema = mongoose.Schema
  3. const UserSchema = new Schema({
  4. name: {
  5. type: String,
  6. required: true,
  7. unique: true
  8. },
  9. email: {
  10. type: String,
  11. required: true,
  12. unique: true
  13. },
  14. password: {
  15. type: 'string',
  16. required: true
  17. },
  18. meta: {
  19. createAt: {
  20. type: Date,
  21. default: Date.now()
  22. }
  23. }
  24. })
  25. module.exports = mongoose.model('User', UserSchema)

使用model

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

  1. const UserModel = require('../models/user')
  2. module.exports = {
  3. async signup (ctx, next) {
  4. const user = {
  5. name: 'liuxing'
  6. email 'chn.liuxing@gmail.com'
  7. password: '123456'
  8. }
  9. const result = await UserModel.create(user)
  10. ctx.body = result
  11. },
  12. }

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

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