重点突破—— Nodejs+Express+MongoDB的使用基础

Posted 宁静致远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重点突破—— Nodejs+Express+MongoDB的使用基础相关的知识,希望对你有一定的参考价值。

 前言:最近学习vue和react的高阶项目,都需要和Nodejs+Express+MongoDB结合实现全栈开发。这里结合实例Demo和所学项目集中总结一下这部分服务端的基础知识。


一、Express+mongodb开发web后台接口Demo

    Express开发web接口

  • Express:基于nodejs,快速、开放、极简的web开发框架  【官网
  • 安装express
    npm install express --save
    
  • 新建server目录:server.js编写后端代码
    const express = require(\'express\');
    
    //新建app模块
    const app = express()
    
    app.get(\'/\', function(req, res){
        res.send(\'<h1>Hello world</h1>\')   //发送html
    })
    
    app.get(\'/data\', function(req, res){
        res.json({name:\'imooc React App\',type:\'IT\'}) //发送json
    })
    
    app.listen(9093, function(){  //自定义监听端口
        console.log(\'Node app start at port 9093\')
    })

  • 查看调试页面:浏览器访问localhost:9093(每次更新server配置后必须重新启动)

  • 监听路由和响应内容,使用nodemon自动重启

    npm install -g nodemon

    启动应用: nodemon server.js 

  •  其它特性
  1. app.get、app.post分别开发get和post接口
  2. app.use使用模块
  3. res.send、res.json、res.sendfile响应不同的内容(分别返回Html文本、JSON、文件)

    Mongodb:非关系型数据库

  • 启动服务:net start MongoDB
  • 关闭服务:net stop MongoDB
  • 安装mongoose
    npm install mongoose --save
  • 通过mongoose操作mongodb存储的就是json,相当于mysql来说,要容易的多  

    Mongoose基础使用

  • Connect连接数据库
    const mongoose = require(\'mongoose\')
    //链接mongo 并且使用react这个集合
    const DB_URL = \'mongodb://127.0.0.1:27017/imooc\'  //前提:开启Mongodb服务
    mongoose.connect(DB_URL)
    mongoose.connection.on(\'connected\', function(){
        console.log(\'mongo connect success\')
    })
  • 定义文档模型,Schema和model新建模型
  • Mongoose重要概念
  1. Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 
  2. Model: 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
  3. Entity: 由Model创建的实体,它的操作也会影响数据库
  • Schema→Model→Entity关系
  1. Schema生成Model 
  2. Model创造Entity 
  3. Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性

    Mongoose文档类型

  • String, Number等数据结构
    //类似于mysql的表 mongo里有文档、字段的概念
    const User = mongoose.model(\'user\', new mongoose.Schema({
        user: {type:String, require:true},
        age: {type:Number, require:true}
    }))
  • 定create、remove、update分别用来增、删、改的操作
  1. 新增数据
    //新增数据
    User.create({
        user: \'xiaohong\',
        age: 10
    }, function(err, doc){
        if(!err){
             console.log(doc)
         }else{
             console.log(err)
         }
    })
    
    app.get(\'/data\', function(req, res){
        //查询User全部数据
        User.find({}, function(err, doc){
          res.json(doc)
        })
    })

      

  2. 删除数据
    //删除数据
    User.remove({age:10},function(err, doc){
        console.log(doc)
    })

  3. 更新数据
    //更新数据
    User.update({\'user\':\'xiaoming\'},{\'$set\':{age: 26}}, function(err, doc){
         console.log(doc)
    })

  • find和findOne用来查询数据
  1. find:查找到的是数组,其中可包含多条数据对象
    //查询数据
    User.find({age:18}, function(err, doc){
            res.json(doc)
    })

  2. findOne:查找到的是数据对象本身

    //查询数据
    User.findOne({user:\'xiaoming\'}, function(err, doc){
            res.json(doc)
    })

    Demo实例代码

/**
 * express Demo
 */
const express = require(\'express\');
const mongoose = require(\'mongoose\')

//链接mongo 并且使用react这个集合
const DB_URL = \'mongodb://127.0.0.1:27017/imooc\'
mongoose.connect(DB_URL)
mongoose.connection.on(\'connected\', function(){
    console.log(\'mongo connect success\')
})

//类似于mysql的表 mongo里有文档、字段的概念
const User = mongoose.model(\'user\', new mongoose.Schema({
    user: {type:String, require:true},
    age: {type:Number, require:true}
}))

// 新增数据
// User.create({
//     user: \'xiaolan\',
//     age: 18
// }, function(err, doc){
//     if(!err){
//         console.log(doc)
//     }else{
//         console.log(err)
//     }
// })

//删除数据
// User.remove({user: \'xiaolan\'},function(err, doc){
//     console.log(doc)
// })

//更新数据
// User.update({\'user\':\'xiaoming\'},{\'$set\':{age: 26}}, function(err, doc){
//     console.log(doc)
// })


//新建app模块
const app = express()

app.get(\'/\', function(req, res){
    res.send(\'<h1>Hello world</h1>\')   //发送Html
})

app.get(\'/data\', function(req, res){
    //查询数据
    User.find({}, function(err, doc){
        res.json(doc)
    })
    // res.json({name:\'imooc React App\',type:\'IT\'}) //发送json
})

app.listen(9093, function(){
    console.log(\'Node app start at port 9093\')
})
View Code

 

二、Express和mongodb结合  

1、mongodb独立工具函数

2、express使用body-parser支持post参数

3、使用cookie-parser存储登录信息cookie

  


注:转载请注明出处

以上是关于重点突破—— Nodejs+Express+MongoDB的使用基础的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS/Express/Mongoose 出错 Can't set headers after they are sent

基于nodejs+express+mysql+webstorm+html的 增删改查

nodejs 中的异步之殇

如何在 Express 和 Mongoose 的一个控制器 API 内发出多个“查找”请求?

nodejs中的express啥意思

nodejs 安装express的时候可以指定express的版本吗