Express基本接口开发-入门学习与后续进阶

前提推荐

任何一个新的知识都是从文档看起,因此express官方文档示例有必要去学习一遍。
推荐看:

  1. 推荐入门
  2. 指南-路由
  3. 指南-中间件

在这里插入图片描述
看完这几个内容之后心里大概知道express有些什么东西了,然后现在就可以去练习了
注意:更多示例-代码可以在了解基本的内容之后在去看去练习

第一步:了解Express应用程序生成器

项目说明
通过
通过命令行执行之后会生成一个文件夹。现在了解该文件夹

1./bin/www (项目的启动配置文件,包含了启动端口配置,服务器错误与事件监听(这个文件夹完全可以不用管,端口为3000)在这里插入图片描述

/public/ (一个公共静态数据文件夹,里面的images,javascripts,stylesheets都可以不管)
/routes/ (路由编写文件夹,这里面用来编写接口的)
/views/ (jade 数据模板文件夹,这个其实没啥用。如果仅仅只是开发接口的话完全可以删除掉,但是要注意删除或注释app.js 中的这两行
在这里插入图片描述
app.js 这是一个核心文件,中间件注册,路由注册等功能都在这个文件夹在这里插入图片描述
package.json 包管理文件

第二步:连接数据库

npm install --save mysql
建立数据库连接文件
在这里插入图片描述

第三步:操作数据,使用最原始的sql拼接方式

user.js中如下

var express = require('express');
var router = express.Router();
var connection = require('./db/connection.js')/*** 单表增删查改处理* // 多表联表类似,仅需拼接对应的sql即可*/ 
/* 查询用户列表数据 */
router.get('/list', function(req, res) {const { userName } = req.querylet sql = `select * from sys_user`if(userName){sql = sql + ` where user_name like '%${userName}%'`}// 执行sql语句查询sys_user表中所有数据,最纯粹的方式就是自己拼sql语句try {connection.query(sql, function(error,results){if(error){return res.send({code:500,msg: 'fail',})}else{return res.send({code: 200,msg: 'success',data: results })}})}catch{throw Error('请求失败')}
})
/* 新增用户数据 */
router.post('/add', function(req, res) {let body = req.bodyconsole.log('body', body)let sql = `insert into sys_user (user_name,user_phone) values ('${body.userName}','${body.userPhone}')`try{// sql语句查找拼接即可connection.query(sql, function(error,results){if(error){return res.send({code:500,msg: 'fail',})}else{return res.send({code: 200,msg: 'success',data: results })}})}catch{throw Error('请求失败')}
})
/* 修改用户数据 */
router.post('/edit', function(req, res) {let body = req.bodyconsole.log('body', body)let sql = `update sys_user set user_name='${body.userName}',user_phone=${body.userPhone}where user_id=${body.userId}`// sql语句查找拼接即可connection.query(sql, function(error,results){if(error){return res.send({code:500,msg: 'fail',})}else{return res.send({code: 200,msg: 'success',data: results })}})
})/* 删除用户数据 */
router.get('/delete', function(req, res) {let userId = req.query.userIdif(!userId){res.send({code: 500,msg: '请输入用户id'})}let sql = `delete from sys_user where user_id=${userId}`// 路径为http://localhost:8081/user/delete?userId=1connection.query(sql, function(error,results){if(error){return res.send({code:500,msg: 'fail',})}else{return res.send({code: 200,msg: 'success',data: results })}})
})
module.exports = router;

最原始的一种增删查改方式就完成了

参数说明
req表示的是请求参数对象,其中req.query和req.body两个对象包含着接口请求传递过来的参数
res表示相应参数对象。res.send是对应的响应方法用于编辑返回的数据
  • 如果接口请求是url?a=1&b=2路径形式的传参则在req.query对象里面存在该路径的参数
  • 如果接口请求是body Json形式的传参则在req.body中有该请求的参数
  • connection.query是mysql的方法用于执行sql

文件上传

使用中间件:

npm install --save express-fileupload

app.js中引入

// 配置文件上传模块
var fileUpload = require('express-fileupload');
app.use(fileUpload());
// 注册路由
var fileRouter = require('./src/routes/file');
app.use('/file', fileRouter);

编写file.js文件

var express = require('express');
var router = express.Router();/* 文件上传 */
router.post('/upload', function(req, res) {// 安装express-fileupload之后可以从req.files中找到multipart/form-data上传的文件file// 上传方式参考public图片try {let file = req.files.fileif(!file) {res.send({code: 500,message: '请选择文件'});} else {// 将上传的文件保存在public文件夹中file.mv('./public/' + file.name,function(error){if(error){return res.send({code:500,msg: 'fail',})}else{return res.send({code: 200,msg: 'success',})}})}} catch (err) {res.send({code: 500,msg: '文件上传失败'});}
})
module.exports = router;

项目仓库

gitee仓库:https://gitee.com/twang-gitee/web-server-study.git

关于中间件

文章推荐:https://blog.csdn.net/XiugongHao/article/details/133814757

关于sql查询功能辅助工具:orm框架

typeOrm 和 Sequelize 查看相关文档即可学习

关于express进阶

对于学习express框架而言其实是比较简单的,了解完上面内容即可完成常规的小项目开发,需要的功能可以找出对应的中间件协助即可,如:生成token完成登录,想要用orm操作则添加进去使用,不想要则直接最原始的拼接sql即可
但是如果想要更加深入学习使用nodejs并且开发服务端应用,则推荐学习nestjs框架(基于express的进阶框架)
推荐文章:https://blog.csdn.net/lxy869718069/article/details/114028195

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

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

相关文章

安全区域边界(设备和技术注解)

网络安全等级保护相关标准参考《GB/T 22239-2019 网络安全等级保护基本要求》和《GB/T 28448-2019 网络安全等级保护测评要求》 密码应用安全性相关标准参考《GB/T 39786-2021 信息系统密码应用基本要求》和《GM/T 0115-2021 信息系统密码应用测评要求》 1边界防护 1.1应保证跨…

03-CSS基础选择器

3.1 CSS基础认知&#x1f34e; 3.1.1 &#x1f441;️‍&#x1f5e8;️CSS概念 CSS&#xff1a;层叠样式表&#xff08;Cascading style sheets)&#xff0c;为网页标签增加样式表现的 语法格式&#xff1a; 选择器{<!-- 属性设置 -->属性名:属性值; <!--每一个…

阿里云C++二面面经

1.智能指针 1、shared_ptr 原理:shared_ptr是基于引用计数的智能指针,用于管理动态分配的对象。无论 std::shared_ptr 存储在堆区还是栈区,它所指向的内存块始终存储在堆区。这是因为 std::shared_ptr 是用于管理动态分配的内存的智能指针,它需要存储在堆区,以便进行引用…

直流电动机四象限运行控制变流器设计

摘 要 节能和效率是工业经济发展的主题&#xff0c;电机在各行各业都是主要的动力来源&#xff0c; 直流电机以其控制简单&#xff0c;效率高&#xff0c;功率密度大等优势脱颖而出。基于直流电动机四象限运行控制变流器应用广泛&#xff0c;比如电子设备、电机控制、工业等行…

Spring Cloud Netflix微服务组件-Eureka

CAP理论 分区容忍是能容忍一个或一部分节点挂掉后&#xff0c;整体系统也能正常工作&#xff08;就是别的节点还是活着的&#xff09;&#xff0c;所以分布式系统中P是必须要有的。比如数据库主从架构&#xff0c;主从两个节点之间需要数据同步&#xff0c;主挂了&#xff0c;…

Mysql中的索引与事务和B树的知识补充

索引与事务和B树的知识补充 一.索引1.概念2.作用3.使用场景4.使用 二.事务1.为什么使用事务2.事务的概念3.使用3.1脏读问题3.2不可重复读3.3 幻读问题3.4解决3.5 使用代码 三.B树的知识补充1.B树2.B树 一.索引 1.概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记…

Git常用配置

git log 美化输出 全局配置参数 git config --global alias.lm "log --no-merges --color --dateformat:%Y-%m-%d %H:%M:%S --authorghost --prettyformat:%Cred%h%Creset - %Cgreen(%cd)%C(yellow)%d%Cblue %s %C(bold blue)<%an>%Creset --abbrev-commit"…

程序员一般从什么平台兼职接私活?国内外主流9大平台汇总!

我想对于有一定工作经验的工程师来说&#xff0c;肯定听说过或者切身经历过公司裁员、公司倒闭、甚至清退年龄稍大的工程师等一系列负面情况。 其实我们作为员工来说&#xff0c;面对这些打击&#xff0c;我们能争取到的权益是比较少的&#xff0c;即使争取到了一些权益或补偿…

如何实现MQTT协议数据传输?

如何实现MQTT协议数据传输&#xff1f; 随着物联网技术的不断发展&#xff0c;越来越多的设备和应用需要实现互联互通。而MQTT作为一种轻量级的发布/订阅消息传输协议&#xff0c;在物联网领域应用广泛&#xff0c;成为了许多设备之间数据交互的首选。蓝蜂物联网推出的MQTT网关…

【功能栏】基于session的模拟短信注册功能

框架&#xff1a; spring boot mybatis-plus 目录 1.创建user表 ​编辑2. mybatis-plus插件 3.导入相关依赖 4.配置文件 5.前端代码 register.html style.css 6.后端代码 entity层 mapper层 sevice层 业务层接口 业务层实现类 controller层 7.调试 1. 未输…

unity UGUI无限循环滚动居中

最近在做一个ui循环滚动的功能&#xff0c;网上找了半天脚本感觉都和我实际需求不太符合&#xff0c;自己花费一些时间完成了这个功能记录一下。下面开始正题 &#xff0c;我是采用unity自带组件Scroll View来完成&#xff0c;首先设置Scroll View如下图 面板层级结构如下 然…

C语言每日一题(29)合并两个有序链表

力扣网 21合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 思路分析 最基本的一种思路就是&#xff0c;遍历两个链表&#xff0c;将对应结点的值进行比较&#xff0c;题目要求是要升序排…

二部图问题

目录 一、介绍 二、染色算法的实现 三、无权二部图中的最大匹配 四、有权二部图中的最大匹配 五、稳定婚配问题 一、介绍 二部图是一种特殊的图&#xff0c;其中所有的节点可以被分成两个不相交的集合&#xff0c;使得图中的每条边连接的两个节点分属于不同的集合。换句话…

什么是GIL锁,有什么作用?python的垃圾回收机制是什么样的?解释为什么计算密集型用多进程,io密集型用多线程。

1 什么是gil锁&#xff0c;有什么作用&#xff1f; 2 python的垃圾回收机制是什么样的&#xff1f; 3 解释为什么计算密集型用多进程&#xff0c;io密集型用多线程。 1 什么是gil锁&#xff0c;有什么作用&#xff1f; 1 GIL&#xff1a;Global Interpreter Lock又称全局解释器…

基于安卓android微信小程序的食谱大全系统

项目介绍 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个开发过程首先对食谱大全进行需求分析&#xff0c;得出食谱大全主要功能。接着对食谱大全进行总体设计和详细设计。总体设…

源码升级gcc

wget https://ftp.gnu.org/gnu/gcc/gcc-8.1.0/gcc-8.1.0.tar.gztar -xzf gcc-8.1.0.tar.gzcd gcc-8.1.0/打开/contrib/download_prerequisites&#xff0c;查看依赖的库 wget http://mirror.linux-ia64.org/gnu/gcc/infrastructure/mpfr-3.1.4.tar.bz2 & wget http://mir…

实现高值医疗耗材智能化管理的RFID医疗柜解决方案

一、行业背景 医疗物资管理面临着一系列问题&#xff0c;如高值耗材种类激增导致准入标准弱化、信息追踪困难、管理责任不明确等&#xff0c;医院内部设备、财务和临床科室相互独立&#xff0c;兼容性不佳&#xff0c;高值耗材储备不足&#xff0c;缺乏合理的预警机制&#xf…

Java 21:最新特性、性能改进和语言发展

文章目录 模式匹配和模式变量新的记录类型生产者接口本地类型推断的扩展新的垃圾收集器动态CDS档案G1垃圾收集器的增强Java语言的持续发展性能改进和JEPJava 21的部署和使用Java 21的生态系统结语 &#x1f389;欢迎来到Java学习路线专栏~Java 21&#xff1a;最新特性、性能改进…

Postman接口Mock Servier服务器

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 应用场景&#xff1a;后端的接口还没有开发完成&#xff0c;前端的业务需要调用后端的接口&#xff0c;可以使用mock模拟。 一…

Android高级实践分享

以下是我学习过程中&#xff0c;觉得比较好的Android进阶高级实践&#xff0c;分享给大家&#xff0c;可能有些东西差异化比较大了&#xff0c;但是我也想经过这些实践&#xff0c;踩踩坑。等我搞完&#xff0c;给大家出一下实践教程 Android进阶之旅&#xff1a; https://ww…