这篇文章的草稿放在个人Ghost博客后台由来已久了,由于我想在写一篇Vuex总结性的文章以后再发表它。这样也有个按部就班的感受。本文适合了解Vue.js
、Vuex
、以及MongoDB
的小伙伴。html
Node下开发应用,如何持久化数据?vue
我以为MongoDB是很好的解决方案。尤为适合敏捷开发。node
Node下使用MongoDB,如何操做MongoDB数据库?git
我刚开始接触MongoDB的时候还在用node-mongodb-native,MongoDB出品的Node.js驱动。操做数据库可不像Oracle,MySQL这种关系型数据库,基本的SQL语言搞定。那代码量一坨一坨的。因而发现了Mongoose,有了它代码量减轻了很多。那么就用它了。github
链接MongoDB数据库mongodb
定义一个schema而且建立一个modelvuex
在应用中使用model数据库
经过Vuex全局化modeljson
在组件中经过getters获取modelapp
只需链接一次。
App.vue
<script> import store from './vuex/store' import mongoose from 'mongoose' import env_conf from './config/env_dev.json' // 读取配置文件 mongoose.connect(env_conf.db.uri, env_conf.db.options) export default { name: 'App', store, data () { return { title: 'vuex-mongoose' } } } </script> <template> <div id="app"> <h1><span v-text="title"></span></h1> </div> </template> <style> body { font-family: Helvetica, sans-serif; } </style>
config/env_dev.json
{ "name": "development", "db": { "uri": "mongodb://localhost:27017/vuex-mongoose", "options": { "server": { "poolSize": 10 } } } }
vuex/models/user.js
导出一个user的model为app所用。
import mongoose from 'mongoose' const Schema = mongoose.Schema const userSchema = new Schema({ _id: Number, username: String, password: String }) const User = mongoose.model('user', userSchema) export default User
这里须要注意一点,
const User = mongoose.model('user', userSchema)
这句声明的User中使用的数据库集合为user,可是实际在数据库中对应的是user的复数,即为users。
把user的model写成一个模块以后,在应用中使用model变的很简单。
只需导入user模块便可:
import User from '../models/user'
这样就可使用model来操做数据库了。好比生成一条记录能够这样:
const userInfo = { username: 'Hello Kitty', password: '666666' } User.create(userInfo, function (err, result) { if (err) { console.log(err); } })
为何要全局化model?
全局化model的意思其实就是经过vuex把model做为一个state(状态)保存起来。在应用中能够经过getters获取到model。这样能够解决咱们屡次导入user模块,从而使数据库链接数增长的问题。
App.vue
<script> import store from './vuex/store' import mongoose from 'mongoose' import env_conf from './config/env_dev.json' mongoose.connect(env_conf.db.uri, env_conf.db.options) import { setModel } from './vuex/actions' import User from './vuex/models/user' // 导入user的model模块 export default { name: 'App', store, data () { return { title: 'vuex-mongoose' } }, ready () { this.setModel(User) // 存储在vuex里 } } </script> <template> <div id="app"> <h1><span v-text="title"></span></h1> </div> </template> <style> body { font-family: Helvetica, sans-serif; } </style>
vuex/modules/global.js
// vuex/modules/global.js import { SET_MODEL } from '../mutation-types' // initial state const state = { User: '' } // mutations const mutations = { [SET_MODEL](state, User) { state.User = User } } export default { state, mutations }
CreateUser.vue
vuex: { getters: { User: ({ global }) => global.User } }, methods: { createUser() { const userInfo = { username: 'Hello Kitty', password: '666666' } this.User.create(userInfo, function (err, result) { if (err) { console.log(err); } }) } }, ready () { this.createUser() }
这样咱们就能够在组件中使用User
作各类数据库操做了。