一、在项目中添加mongodb数据库
npm install –save mongoose
二、连接操作,写在你想要开始连接mongodb的地方,一般放在app.js当中。
然后我们需要搞清楚mongoose的几个概念:
Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model: 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
Entity: 由Model创建的实体,他的操作也会影响数据库
Schema、Model、Entity的关系请牢记,Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。
根据以上几点,我们了解了一个大致的流程之后,就知道要首先创建什么,然后在创建什么。
1、创建目录与文件
config.js用来保存mongodb的连接地址:
// 数据库地址: 'mongodb://用户名:密码@ip地址:端口号/数据库';
module.exports = {
mongodb : 'mongodb://cha:root@localhost:27017/ch_db'
}
mongoose.js用来连接mongodb数据库并引用定义Schema和Model:
const mongoose = require('mongoose');
const config = require('./config');
module.exports = ()=>{
// mongoose.Promise = global.Promise;//如果有promise的问题,可以用这个试试
mongoose.connect(config.mongodb);//连接mongodb数据库
// 实例化连接对象
var db = mongoose.connection;
db.on('error', console.error.bind(console, '连接错误:'));
db.once('open', (callback) => {
console.log('MongoDB连接成功!!');
});
return db;
}
schemas.js用来定义Schema:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//创建Schema
var userSchema = new Schema({
username:String,
password:String
});
module.exports = userSchema;
models.js用来定义Model:
var mongoose = require('mongoose');
var UserSchema = require('../schemas/UserSchema');
//创建model,这个地方的ch_user对应mongodb数据库中ch_users的conllection。
//mongoose会自动改成复数,如模型名:xx―>xxes, kitten―>kittens, money还是money
var User = mongoose.model('ch_user',UserSchema);
module.exports = User;
2、在app.js中添加数据库的引用
var mongoose = require('./config/mongoose.js');
var db = mongoose();
3、在路由routes中使用数据库
var express = require('express');
var router = express.Router();
var User = require('../models/User');// 引入模型
router.get('/',function(req,res,next){
res.render('login');
});
router.post('/submit',(req,res,next)=>{
// var user = new User({
// username:'admin',
// password:'123'
// });
// user.save((err)=>{ //添加
// console.log('save status:', err ? 'failed' : 'success');
// });
// User.find({ //查找
// username:'admin',
// password:'123'
// },(err, docs)=>{
// if(err){
// res.send('server or db error');
// }else{
// console.log('登录成功用户:'+docs);
// if(docs.length==0){
// res.send('用户名或密码有误');
// }else{
// req.session.user = {
// _id:docs[0]._id,
// username:docs[0].username
// };
// res.send('login success');
// }
// }
// });
User.findOne({ //查找一条
username:'admin',
password:'123'
},(err, doc)=>{
if(err){
res.send('server or db error');
}else{
console.log('登录成功用户:'+doc);
if(doc==null){
res.send('用户名或密码有误');
}else{
req.session.user = {
_id:doc._id,
username:doc.username
};
res.send('login success');
}
}
})
});
module.exports = router;