安装MongoDB
下载安装包,安装完成后配置环境变量。
创建data文件夹,并在此文件夹下创建db文件夹、log文件夹以及mongodb的配置文件。
配置文件如下:
以管理员身份打开cmd,运行如下代码即可安装MongoDB服务。
mongod --config C:\data\mongodb.cfg --install
Windows+R 输入:servers.msc打开服务查看:
连接MongoDB
在创建的express项目文件夹根目录上,新建db.js。
var mongoose = require("mongoose"); //引入mongoose
var db = mongoose.connection;
db.on('error', function callback() { //监听是否有异常
console.log("Connection error");
});
db.once('open', function callback() { //监听一次打开
//在这里创建你的模式和模型
console.log('connected!');
});
db.on('connected', () => {
console.log('MongoDB connected success');
});
db.on('disconnected', () => {
console.log('MongoDB connected disconnected');
});
mongoose.connect('mongodb://localhost/todo'); //连接到mongoDB的todo数据库
//该地址格式:mongodb://[username:password@]host:port/database[?options]
//默认port为27017
//Schema (属性):在Mongoose里一切都是从Schema开始的,每一个Schema都会映射到MongoDB的一个collection上。Schema定义了collection里documents的模板(或者说是框架)。【一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力】
var StuffSchema = new mongoose.Schema({
u_id: String,
name: String,
position: String,
zhongdui: String,
dadui: String
});
//model (模型):为了使用定义好的Schema,我们需要把blogSchema转换成我们可以使用的model(其实是把Schema编译成model,所以对于Schema的一切定义都要在compile之前完成)。也就是说model才是我们可以进行操作的handle。
mongoose.model('Stuff', StuffSchema);//将该Schema发布为Model
module.exports = mongoose;
在routes文件夹下index.js中引入:
var mongoose = require('../db.js');//引入对象
var Stuff = mongoose.model('Stuff');//引入模型
接下来,就可使用名为Stuff的model操作数据库了。比如,新增一条记录:
Stuff.create(stuff, function(err,doc){
if(err){
console.log(err);
}
else{
console.log(doc);
res.json({status:200})
}
})
解决跨域访问
打开app.js配置下列代码:
app.all("*", function(req,res,next){
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin","http://localhost:8080");
//允许的header类型
res.header("Access-Control-Allow-Headers","content-type");
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
res.header("Content-Type","application/json;chaarset=utf-8");
if(req.method.toLowerCase() == 'options')
res.send(200);//让options尝试请求快速结束
else{
next();
}
});
Tips
MongoDB按时间段匹配时,使用find可匹配到,但使用match匹配不到,应该使用new Date()进行转换:
{$match:{inspect_time:{"$gte":new Date(query_time[0]), "$lte":new Date(query_time[1])}}
完美解决!