【Mongoose应用和文件上传】一.Express框架访问MongDB数据库;二.node实现文件上传

目录

一.Express框架访问MongDB数据库

1.目的:

(1)mongoose模块的使用

(2)学会代码的封装:dao层、service层、接口层

(3)MVC设计思想:M(Model)、V(View)、C(controller)

2.设计思路:

(1)数据库:blog集合(blogId、title、content、type、author、createAt)

(2)创建Schema-----》创建模型Model-----》操作数据库中的blog集合 

(3)创建Service层:调用dao层访问数据库、接收客户端的数据、把处理的结果响应给客户端

(4)创建接口层:路由接口(路由中间件)

(5)测试接口

(6)创建前端页面

3.代码实现

(1)创建Express项目:确定端口号、跨域的设置、代码更新能自动重启

(2)项目目录结构的设置:

        dao(config、model、crud)

        service

(3)安装mongoose、定义配置文件(连接数据库)

二.node实现文件上传

1.FormData对象:以对象的方式来表示页面中的表单,又称为表单对象。以key:value的方式来保存数据,XMLHttpRequest对象可以轻松的将表单对象发送到服务器端

(1)是一个构造函数:new FormData(),例如:

(2)常用的API:

2.node使用formidable模块实现文件上传

(1)安装:npm install formidable

(2)创建Formidable.IncomingForm对象:本质是一个表单对象

(3)Formidable.IncomingForm对象的属性:

(4)Formidable.IncomingForm对象的方法:

(5)Formidable.File对象的属性:

3.示例:

(1)前端:


一.Express框架访问MongDB数据库

1.目的:

(1)mongoose模块的使用

(2)学会代码的封装:dao层、service层、接口层

(3)MVC设计思想:M(Model)、V(View)、C(controller)

2.设计思路:

(1)数据库:blog集合(blogId、title、content、type、author、createAt)

(2)创建Schema-----》创建模型Model-----》操作数据库中的blog集合 

(3)创建Service层:调用dao层访问数据库、接收客户端的数据、把处理的结果响应给客户端

(4)创建接口层:路由接口(路由中间件)

(5)测试接口

(6)创建前端页面


    


    






3.代码实现

(1)创建Express项目:确定端口号、跨域的设置、代码更新能自动重启

(2)项目目录结构的设置:

        dao(config、model、crud)

config文件----》dbconfig.js

//1.导入mongoose模块
const Mongoose = require('mongoose');
//2.定义MongDB数据库的连接字符串:协议://主机地址:端口号/数据库名
const db_url = 'mongodb://127.0.0.1:27017/my_test'
//3.建立和MongDB数据库的连接:
Mongoose.connect(db_url,{useNewUrlParser:true,useUnifiedTopology:true});
//4.对连接过程进行处理
//4.1连接成功是---connected
Mongoose.connection.on('connected',function (){
    console.log('连接成功,地址为'+db_url)
})
//4.2连接失败----error
Mongoose.connection.on('error',function (err){
    console.log('连接失败,原因是'+err)
})
//4.3断开连接-----disconnected
Mongoose.connection.on('disconnected',function (){
    console.log('断开了数据库的连接')
})
//5.导出Mongoose模块
module.exports = Mongoose

model文件----》blogmodel.js 

//导入配置文件
const Mongoose = require('../config/dbconfig')
//导入Schema
const Schema = Mongoose.Schema
//
const BlogSchema = new Schema({
    blogId: {type:Number,unique:true},
    type: {type:String},
    title: {type:String},
    content: {type:String},
    author: {type:String},
    createAt: {type:Date}
},{
    versionKey:false, //去掉了文档中的'_v'键
    timestamps:{    //设置
        createdAt:true,
        updatedAt:false
    }
})
//
module.exports = Mongoose.model('blog',BlogSchema,'blog')

 crud文件----》blogdaol.js 

const BlogModel = require('../model/blogmodel')
//增
exports.insertBlog = async function (blog){
    return await BlogModel.create(blog)
}
//删
exports.removeBlog = async function (b_id){
    return await BlogModel.deleteOne({
        blogId:b_id
    })
}
//改
exports.modifyBlog = async function(blog){
    return await BlogModel.findOneAndUpdate({
        blogId:blog.blogId
    },{
        $set:{title:blog.title,content:blog.content,type:blog.type}
    })
}
//查
exports.findAll = async function(){
    return await BlogModel.find()   //返回Promise对象
}
//统计记录数
exports.getCount = async function(){
    return await BlogModel.count()
}

        service

service文件----》blogservice.js 

/*  作用:
        (1)接收客户端的请求数据:req对象
        (2)调用dao层访问数据库:导入dao层对象
        (3)将处理结果响应给客户端:res对象
*/
//1.导入dao层对象
const blogDao = require('../dao/crud/blogdao')
//2.对blog对象进行增删改查,同时响应给数据库
//增
exports.addBlog = async function (req,res){
    var b_id = 0
    try{
        b_id = await blogDao.findAll().then((result)=>{  //参数result中存放的是dao层查询的结果集(本质是数组)
            return result[result.length-1].blogId   //返回result数组中最后一条记录的blogId属性值
        })
    }catch (e) {
        console.log(e)
    }
    let blog = {
        blogId:b_id + 1,
        title:req.body.blogTitle, //必须跟前端页面中的name值相同
        content:req.body.blogContent,
        type:req.body.blogType,
        author:'小马尾'
    }
    blogDao.insertBlog(blog).then((result)=>{
        res.json({
            code:1000,
            info:result
        })
    }).catch((e)=>{
        console.log(e)
    })
}
//删
exports.deleteBlog = async function(req,res){
    let b_id = req.body.blogId
    blogDao.removeBlog(b_id).then((result)=>{
        res.json({
            code:1000,
            info:result
        })
    }).catch((e)=>{
        console.log(e)
    })
}
//改
exports.modifyBlog = async function(req,res){
    let blog = {
        blogId:req.body.blogId,
        title:req.body.title,
        content:req.body.content,
        type:req.body.type
    }
    blogDao.modifyBlog(blog).then((result)=>{
        res.json({
            code:1000,
            info:result
        })
    }).catch((e)=>{
        console.log(e)
    })
}
//查
exports.findAllBlog = async function(req,res){
    blogDao.findAll().then((result)=>{
        res.json(result)
    }).catch((e)=>{
        console.log(e)
    })
}
//统计
exports.countBlog = async function(req,res){
    blogDao.getCount().then((result)=>{
        res.json(result)
        console.log(result)
    }).catch((e)=>{
        console.log(e)
    })
}

        routes 

api文件-----》blogapi.js

const express = require('express')
const router = express.Router()

const blogservice = require('../../service/blogservice')

//add  http://127.0.0.1:9000/api/addBlog
router.post('/addBlog',blogservice.addBlog)
//delete    http://127.0.0.1:9000/api/deleteBlog
router.delete('/deleteBlog',blogservice.deleteBlog)
//modify    http://127.0.0.1:9000/api/modifyBlog
router.post('/modifyBlog',blogservice.modifyBlog)
//findAll   http://127.0.0.1:9000/api/findAll
router.get('/findAll',blogservice.findAllBlog)
//countBlog     http://127.0.0.1:9000/api/countBlog
router.get('/countBlog',blogservice.countBlog)


module.exports = router

(3)安装mongoose、定义配置文件(连接数据库)

【Mongoose应用和文件上传】一.Express框架访问MongDB数据库;二.node实现文件上传_第1张图片

你可能感兴趣的:(js,mvc,前端,数据库,javascript,express)