从网上找了好多关于 express 与mongodb的,总是不尽人意,所以就自己研究了一套框架。首先需要安装mongodb和 nodejs,这个在这里不介绍。
这里利用的是Mongoose进行数据库的操作。
安装
npm install express -g
创建一个 express 项目
express nodemogod
npm install
npm run start
然后打开http://localhost:3000,如果成功,说明 express 项目已经起好了。
mongoose.connect('mongodb://localhost:27017/nodemogodtest',{useNewUrlParser:true});
Schema定义数据库的结构。用于定义字段和集合的,但是不具备操作数据库的能力。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var testSchema = new Schema({
title: String,
author: String
});
Model是由Schema编译而成的构造器,可以操作数据库
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var testSchema = new Schema({
title: String,
author: String
});
module.exports = mongoose.model('test',testSchema);
数据库存的是 test 的集合。
Users.create({username:'ccc'}).then(function () {
})
并在里面新建 mogo_base.js,msg.js
mogo_base.js数据库配置文件
var mongoose = require('mongoose'),
DB_URL = 'mongodb://localhost:27017/nodemogodtest';
/**
* 连接
*/
mongoose.connect(DB_URL,{useNewUrlParser:true});
/**
* 连接成功
*/
mongoose.connection.on('connected', function () {
console.log('Mongoose connection open to ' + DB_URL);
});
/**
* 连接异常
*/
mongoose.connection.on('error',function (err) {
console.log('Mongoose connection error: ' + err);
});
/**
* 连接断开
*/
mongoose.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected');
});
module.exports = mongoose;
修改 bin/www 文件加入代码
var mongoose = require('../auth/mogo_base')
msg.js,用于封装返回数据格式。
exports.pass = function (res,msg, dat,code) {
msg = msg||"OK";
dat =dat|| {};
code = code||200
res.status(code).send({code:code,msg: msg, data: dat})
};
exports.fail = function (res,reason, code) {
code = code||500
reason = reason||''
res.status(code).send({code:code,msg: reason})
};
新建users.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//申明一个mongoons对象
var UsersSchema = new Schema({
username : { type: String }, //用户账号
userpwd: {type: String}, //密码
userage: {type: Number}, //年龄
logindate : { type: Date} , //最近登录时间
// name: String,
// paw: String,
meta: {
createAt: {
type: Date,
default: Date.now()
},
updateAt: {
type: Date,
default: Date.now()
}
}
})
//每次执行都会调用,时间更新操作
UsersSchema.pre('save', function(next) {
if(this.isNew) {
this.meta.createAt = this.meta.updateAt = Date.now();
}else {
this.meta.updateAt = Date.now();
}
next();
})
//查询的静态方法
UsersSchema.statics = {
fetch: function(cb) { //查询所有数据
return this
.find()
.sort('meta.updateAt') //排序
.exec(cb) //回调
},
findById: function(id, cb) { //根据id查询单条数据
return this
.findOne({_id: id})
.exec(cb)
}
}
//暴露出去的方法
module.exports = UsersSchema
新建 users.js
var mongoose = require('mongoose')
var UsersSchema = require('../schemas/users') //拿到导出的数据集模块
var Users = mongoose.model('Users', UsersSchema) // 编译生成Movie 模型
module.exports = Users
var express = require('express');
var router = express.Router();
//新增
var mongoose = require('mongoose');//导入mongoose模块
var Users = require('../modules/users');//导入模型数据模块
var _msg = require('../auth/msg')
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
//查询所有用户数据
router.get('/users', function(req, res, next) {
return Users.find().then(function (users) {
return _msg.pass(res,'',users)
})
})
router.get('/add', function(req, res, next) {
// return Users.create({username:'bbb'},function () {
// return _msg.pass(res)
// })
return Users.create({username:'ccc'}).then(function () {
return _msg.pass(res)
})
})
module.exports = router;
npm run start
在浏览器中输入http://localhost:3000/users/add,添加一条用户数据
返回数据:
{"code":200,"msg":"OK","data":{}}
在浏览器中输入http://localhost:3000/users/users,获取所有的用户
返回数据
{"code":200,"msg":"OK","data":[{"meta":{"createAt":"2018-11-14T04:09:28.159Z","updateAt":"2018-11-14T04:09:28.159Z"},"_id":"5beb9ff8f20f5a0c1d688608","username":"ccc","__v":0},{"meta":{"createAt":"2018-11-14T04:31:24.106Z","updateAt":"2018-11-14T04:31:24.106Z"},"_id":"5beba51c42103a0c44bfa3cb","username":"ccc","__v":0}]}