Express连接MongoDB和解决跨域访问

安装MongoDB

下载安装包,安装完成后配置环境变量。


配置环境变量

创建data文件夹,并在此文件夹下创建db文件夹、log文件夹以及mongodb的配置文件。


data文件夹

配置文件如下:
配置文件

以管理员身份打开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])}}

完美解决!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容