使用 Mongoose 连接 JS 和 MongoDB
Mongoose 是一个 JS 库,作用是把 MongoDB 的数据,封装成 JS 对象。便于 我们用 JS 代码来操作 Mongodb 。
有了 Mongoose 之后,我们就可以用 JS 代码来进行 增 删 改 查 了。
参考:
连接数据库
首先 装包,安装到后台 express 代码中,执行装包命令:
$ npm install --save mongoose
装包成功后,一般的步骤就是先导入,后调用。
打开 express-backend 的 index.js 文件
const mongoose = require('mongoose');//导入 mongoose
mongoose.connect('mongodb://localhost:27017/express-react-demo');//然后进行连接
// 执行此行代码之前,要保证 mongodb 数据库已经运行了,而且运行在 27017 端口
然后…启动数据库,保证有一个 database 叫做 express-react-demo 。
然后…进行测试,添加下面代码测试连接是否成功
let db = mongoose.connection;
db.on('error', console.log);
db.once('open', function() {
console.log('success!')
});
如果连接数据库成功,就打印 success 。once(‘open’) 的意思就是 “一旦打开成功” 。如果数据库没有启动,是看不到 success 的。
创建数据 model
创建一个专门的 models/user.js
,里面代码的作用是,实现一个对象跟一个数据集合之间映射关系。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
const UserSchema = new Schema(
{
username: { type: String },
email: { type: String }
}
);
module.exports = mongoose.model('User', UserSchema);
// `User` 会自动对应数据库中的 users 这个集合
// 如果这里是 Apple 那么就会对应 apples 集合
// 如果这里是 Person 那么就会对应 people 集合
首先创建了一个 Schema (概要),Schema 就是用来描述这个集合中每个文档 的数据结构,具体来讲就是
- 有那几个字段 ( field )?我们这里有两个
username
和email
- 每个字段的类型
这样,映射关系就建立完毕。最终用 module.exports
导出的就是一个 model (模型)
$ mongo
> show dbs
admin 0.000GB
express-react-demo 0.000GB
local 0.000GB
> use express-react-demo
switched to db express-react-demo
> show collections
users
保存一个文档
把 db.once
部分的代码,改成下面这个样子
let User = require('./models/user');
...
db.once('open', function() {
let user = new User({username: 'inCode', email: 'inCode@incode.com'});
user.save(function(err){
if(err) console.log(err);
})
console.log('success!')
});
然后,后台重启 nodemon index.js
看看数据库中,的确添加了一个文档。
强调:`User` 对应 users 集合,她本身是 models/user.js 中导出的一个 model 。所以说 User 就是一个空盒子。而小写的 user 是
new User
得到的一个对象,对应一个实际的文档,所以其中会真正保存一个用户的实际 username 和 email 数据。
user.save
就是把 user
中已经有的数据(在内存中),真正保存到 MongoDB 数据库中(保存到硬盘上)。
代码
index.js 如下
const express = require('express');
const app = express();
//解决跨域请求
const cors = require('cors');
app.use(cors());
//使用 Mongoose 连接 JS 和 MongoDB
const mongoose = require('mongoose');
// 执行此行代码之前,要保证 mongodb 数据库已经运行了,而且运行在 27017 端口
mongoose.connect('mongodb://localhost:27017/express-react-demo');
const User = require('./models/user')
let db = mongoose.connection;
db.on('error', console.log);
db.once('open', function() {
let user = new User({username: 'fightingljm', email: '132@qq.com'})
user.save(function () {
if(err){
console.log(err)
}
})
console.log('success!')
});
// 下面三行就是我们实现的一个 API
app.get('/username', function(req, res){
res.json({"username": "happypeter"});
})
app.listen(3000, function(){
console.log('running on port 3000...');
});
models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
const UserSchema = new Schema(
{
username: { type: String },
email: { type: String }
}
);
module.exports = mongoose.model('User', UserSchema);
// `User` 会自动对应数据库中的 users 这个集合
// 如果这里是 Apple 那么就会对应 apples 集合
// 如果这里是 Person 那么就会对应 people 集合
package.json 如下
{
"name": "express-backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.1",
"express": "^4.14.0",
"mongoose": "^4.7.2"
}
}