Mongoose应用和文件上传

news2024/11/25 23:00:54

一、Express框架访问MongoDB数据库

1、目的:

​ (1)mongoose模块的使用

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

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

2、设计思路:

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

​ (2)创建Dao层:创建Schema —-> 创建模型Model —-> 操作数据库中的blog集合

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

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

​ (5)测试接口

​ (6)创建前端页面

​ (7)实现blogId的自增

3、代码实现

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

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

​ dao(config、model、crud)

​ service

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

二、node实现文件上传

1、FormData对象:以对象的方式来表示页面中的表单,又称为表单对象。以key-value的方式来保存数据,XMLHttpRequest对

象可以轻松的表单对象发送的服务器端

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

var  formdata = new FormData(form)  //将页面中的表单form转换成FormData对象(即将表单数据转换成key-value对)

(2)常用的API:

​ FormData.append(key,value):追加数据。向formdata中追加key-value

​ FormData.get(key):获取key对应的值

​ FormData.delete(key):删除key对应的值

​ FormData.has(key):判断formdata中是否有key

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

​ (1)安装:npm install formidable

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

​ let form = new Formidable.IncomingForm()

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

​ form.encoding : 设置字符集

​ form.uploadDir:设置上传文件的保存路径

​ form.keepExtensions:true,表示上传时保留原来的扩展名

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

​ form.parse(request, [callback]):转换请求中的表单数据

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

​ size:上传文件的大小

​ path:上传文件的路径

​ type:上传文件的类型

​ name:上传的文件名

3、示例:

​ (1)前端:

<body>
    <label>请选择文件:
        <input type="file" id="file">
    </label>
    <br><br>
    <div id="box">div</div>
    <script>
        $(function(){
            //给file控件绑定change事件
            $('#file').change(function(){
                if($('#file').val().length){ //如果用户选择了文件
                    let fileName = $('#file').val()  //获取文件名
                    console.log(fileName)
                    //获取文件的后缀(扩展名),并把后缀名转换成小写
                    let extenName = fileName.substring(fileName.lastIndexOf('.'),fileName.length).toLowerCase()
                    if(extenName==='.jpg' || extenName==='.png'){ //若文件是图片
                        let  formdata =  new FormData() //创建表单对象
                        console.log($('#file'))
                        console.log($('#file')[0].files[0])
                        formdata.append('upload',$('#file')[0].files[0])
                    }else{
                        alert('文件格式错误')
                    }
                }
            })
        })
    </script>
</body>
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WEB前端期末大作业——关于酒店主题网站设计——高级酒店公寓网页(4页)

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

如何使用gitee码云?创建库,克隆远程仓库,上传代码,小绿格等问题

目录 前提软件&#xff1a;先安装Git&#xff0c;再安装TortoiseGit&#xff08;可以在网上找找~默认下一步安装即可&#xff09; 一、访问网站Gitee - 基于 Git 的代码托管和研发协作平台 二、创建库 二、克隆远程仓库到本地电脑 - 仓库与本地链接 三、上传文件到gitee库里…

【Linux基础知识点】内核、系统调用、Shell、指令集、微架构、硬件架构、用户态、内核态、进程、用户线程、内核线程

参考 Linux内核版本和发行版本Linux架构用户态和内核态的简单理解「建议收藏」CPU、操作系统内核、ARM内核与架构的理解【科普】一文看懂指令集是什么一文搞懂X86架构和ARM架构的区别线程和进程的区别是什么&#xff1f;如何理解内核线程、内核进程&#xff1f; 讲解 知识点详…

Linux 业务突然宕机、系统卡死、磁盘空间爆满,该怎么查?

场景 在服务器运维过程中&#xff0c;我们偶尔会发现业务突然宕机&#xff0c;进去服务器发现异常卡顿查看服务器磁盘空间发现磁盘满载。 如何找到占用空间大的目录或文件&#xff1f; 1、比较笨的方法&#xff1a; 在根目录下&#xff0c;du -hs命令&#xff0c;列出各目录…

Redis缓存问题

目录 1、缓存穿透 2、缓存击穿 3、缓存雪崩 ​​​​​​​4、Redis的并发竞争key问题 ​​​​​​​1、缓存穿透 大量请求缓存中和数据库不存在的数据。 大量用户请求缓存中和数据库中不存在的数据&#xff0c;导致所有请求都落到数据库上&#xff0c;造成数据库短时间内承…

GAMES202 Real-Time Global Illumination

文章目录Lecture 7 Real-time Global Illumination (in 3D)RSM &#xff08;Reflective Shadow Maps&#xff09;Lecture 8 Real-time Global Illumination (screen space)LPV (Light Propagation Volumes)VXGI (Voxel Global Illumination)SSAO (Screen Space Ambient Occlusi…

零基础如何入门Web性能测试?

1、目前正在研究jmeter&#xff0c;请问初期做性能&#xff0c;应先从几点做起&#xff1f; Jmeter和LR都是目前性能测试的首选工具&#xff0c;如果你有LR的学习背景&#xff0c;那么Jmeter上手会很快&#xff0c;重点理解线程和进程的概念&#xff0c;流程和LR是类似的。如果…

ISO27001信息安全管理体系具体要求 学习笔记

ISO27001制定背景 ISO27000 从诞生到现在只不过 20 年间的事情&#xff0c;但基本上可以看出一个标准 “源于生活&#xff0c;高于生活”的发展特点&#xff0c;也就是说&#xff0c;一个真正普遍适用并能被普遍接受的标准&#xff0c;必然是能体现相关领域最佳惯例并能为最佳…

这篇文章告诉你视频转音频软件哪个好用,有需自取

大家看过线下的演唱会或livehouse吗&#xff1f;有些歌手会在现场准备一些小彩蛋&#xff0c;例如演唱还未发行的歌&#xff0c;或是歌曲的其它版本&#xff0c;这时候许多歌迷都会纷纷录制下来&#xff0c;以便后续的欣赏观看。 但是每次想听的时候&#xff0c;都得反复的打开…

工业外观设计中色彩如何有效运用

我相信业内很多设计师都在考虑如何在工业产品外观设计中有目的地运用色彩。最近看了一篇关于如何在工业产品中使用色彩的论文&#xff0c;简单地说了一下自己的想法。 一、加工技术应考虑产品外观设计 工业设计师不仅要考虑材料&#xff0c;还要考虑其表面处理及其颜色。因此&a…

抖音变现模式?80%的人都不知道的秘密,三类更适合玩私域的产品

这篇内容关于适合玩私域的三类产品&#xff0c;精简一下让大家可以3分钟看完。不玩悬念&#xff0c;直接上千货。 上一篇在我赢助手小禾呈序上给大家讲了三个变现的建议&#xff0c;以及两种我比较推荐的变现方式。带货和支付费。今天再讲一个主流的变现思路&#xff0c;最后还…

Android Material Design之MaterialButtonToggleGroup(九)

效果图 资源引入 implementation androidx.appcompat:appcompat:1.3.0 implementation com.google.android.material:material:1.4.0属性 属性描述android:id控件Idandroid:layout_width控件长度android:layout_height控件高度app:checkedButton默认选中得按钮idapp:selectio…

物联网毕业设计 单片机家庭气象站设计与实现

文章目录1 简介2 主要器件引脚连接3 实现效果4 部分实现代码1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设的要求越来越高&#x…

揭秘你代理商做不起来货卖不出去的原因,探讨其背后的商业逻辑

现在很多代理商&#xff0c;大都是可以归于“个体户”性质。这些也代表了微小型企业&#xff0c;从前期的蓬勃发展&#xff0c;到现在的经营受限&#xff0c;特别是疫情等影响&#xff0c;很多人的经营都处于举步维艰的状态&#xff0c;如果你们现在是代理商&#xff0c;仓库里…

v-charts,点击页面按钮,不能二次重绘,解决方案

v-charts简介&#xff1a; 是基于 Vue2.0 和 Echarts 封装的图标组件&#xff0c;只需要统一提供一种对前后端都友好的数据格式设置简单的配置项&#xff0c;就可以生成常见的图表。 v-charts官方文档&#xff1a;v-charts echarts官方文档&#xff1a;Documentation - Apach…

8个关于 Promise.then 和 Promise.catch 的面试题,一定要掌握

前面&#xff0c;我们要讨论了 Promise 在异步编程中的执行&#xff0c;错过的朋友可以直接点击《10 个 JavaScript Promise 的面试题》这篇文章进行查看。 在今天的文章中&#xff0c;我们将讨论这些核心 API 用于 Promise 对象的用法。 这里我提供了10个代码片段&#xff0…

SequoiaDB湖仓一体分布式数据库2022.11月刊

本月看点速览 产品能力再获认可&#xff0c;入围多个榜单、报告 ‍精彩亮相2022沙丘大会湖仓一体专场 实力吸睛&#xff0c;获多家权威媒体关注与报道 生态圈不断扩大&#xff0c;与6家合作伙伴完成互认证 青杉计划2023进行中&#xff0c;一起攀登更高的“杉” 产品能力再获…

WPF 3D 摄像机LookDirection属性研究

像前文一样画一个三角形&#xff1b; 摄像机的位置是(-2,2,2)&#xff1b; 坐标系是这样的&#xff0c;x、y轴是在屏幕上&#xff0c;X轴正向向右&#xff0c;Y轴正向向上&#xff1b;Z轴是垂直于屏幕&#xff0c;从屏幕出来往人的方向为正向&#xff0c;往屏幕里边去是-Z&…

01-06-Hbase基础定义

Hbase定义&#xff1a; Hbase是一种分布式&#xff0c;可扩展&#xff0c;支持海量数据存储的NoSQL数据库。HBase是一个分布式的、面向列的开源数据库。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库&#xff0c;它是一个适合于非结构化数据存储的数据库。…

[附源码]Python计算机毕业设计SSM垃圾分类网站的设计与实现(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…