Express框架与Mongodb的结合使用

前言

如果你打开这篇文章,说明已经开始有做项目的打算了。

这里有express和mongodb的相关参考教程,遇到问题可以在里面找到答案:
Express框架从入门到如土
一文入门Mongodb
这里说下为什么要express框架和mongodb结合。express框架不是指单纯的引入express,而是结合express-generator工具来创建express框架。在前后端未分离的时候,我们还可以使用一些轻量级的数据库如lowdb,但是目前的开发大部分都是前后端分离,用js写后端,用的多的且规范的就是express+mongodb这一套技术栈。所以本文针对这套技术栈进行讲解。

最后就是,本文并不是手把手讲解,只是记录关键步骤。如果有问题可以在上面两篇文章中找答案。

连接数据库

首先导入连接数据库文件:

module.exports = function (success, error) {
    // 导入
    const mongoose = require('mongoose');

    // 连接服务
    mongoose.connect('mongodb://127.0.0.1:27017/test');

    //设置回调
    mongoose.connection.once('open', () => {
        success()
    });

    //设置连接错误的回调
    mongoose.connection.on('error', () => {
        error()
    })

    // 设置连接关闭的回调
    mongoose.connection.on('close', () => {
        console.log('连接关闭')
    })
}

接着在入口文件www中引入

#!/usr/bin/env node

/**
 * Module dependencies.
 */
const db = require('../db/db')
db(() => {
  var app = require('../app');
  var debug = require('debug')('serve:server');
  var http = require('http');

  /**
   * Get port from environment and store in Express.
   */

  var port = normalizePort(process.env.PORT || '3000');
  app.set('port', port);

  /**
   * Create HTTP server.
   */

  var server = http.createServer(app);

  /**
   * Listen on provided port, on all network interfaces.
   */

  server.listen(port);
  server.on('error', onError);
  server.on('listening', onListening);

  /**
   * Normalize a port into a number, string, or false.
   */

  function normalizePort(val) {
    var port = parseInt(val, 10);

    if (isNaN(port)) {
      // named pipe
      return val;
    }

    if (port >= 0) {
      // port number
      return port;
    }

    return false;
  }

  /**
   * Event listener for HTTP server "error" event.
   */

  function onError(error) {
    if (error.syscall !== 'listen') {
      throw error;
    }

    var bind = typeof port === 'string'
      ? 'Pipe ' + port
      : 'Port ' + port;

    // handle specific listen errors with friendly messages
    switch (error.code) {
      case 'EACCES':
        console.error(bind + ' requires elevated privileges');
        process.exit(1);
        break;
      case 'EADDRINUSE':
        console.error(bind + ' is already in use');
        process.exit(1);
        break;
      default:
        throw error;
    }
  }

  /**
   * Event listener for HTTP server "listening" event.
   */

  function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string'
      ? 'pipe ' + addr
      : 'port ' + addr.port;
    debug('Listening on ' + bind);
  }

})

解释一下,传进去的是一个success函数。

到这一步,数据库已经成功连接。

准备模型文件

//导入mongoose
const mongoose = require('mongoose')

let FoodSchema = new mongoose.Schema({
    food: String,
    hot: Number
})

//创建模型对象
let FoodModel = mongoose.model('food', FoodSchema);

module.exports = FoodModel

操作数据库

以读取文档为例操作数据库:

我提前写好了一部分的数据,如下表格:
Express框架与Mongodb的结合使用_第1张图片
接着我在接口中读取数据:

//数据库读取数据库
router.get('/foods', (req, res) => {
  FoodModel.find().then(data => {
    //设置请求头防止跨域
    res.setHeader("Access-Control-Allow-Origin", '*')
    res.send(data)
  }, err => {
    console.log(err)
  })
})

现在我用postman来测试接口已经能够成功获取到了:
Express框架与Mongodb的结合使用_第2张图片
当然也可使用axios来测试:(如果不成功要注意端口号)

    <button class="btn">获取数据</button>
    <script>
        var btn = document.querySelector('.btn');
        btn.addEventListener('click', () => {
            axios({
                methods: "GET",
                url: 'http://127.0.0.1:3000/foods',
            }).then(res => {
                console.log(res)
            }, err => {
                console.log(err)
            })
        })

Express框架与Mongodb的结合使用_第3张图片
其余对数据库的操作可以根据需求,应用该文章中的方法:
一文入门Mongodb

后记

以上就是Express框架与Mongodb的结合使用方法,后续与这方面相关的文章还会继续更新,欢迎关注!

你可能感兴趣的:(Nodejs,mongodb,express,数据库)