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.query
  let 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.body
  console.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.body
  console.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.userId
  if(!userId){
    res.send({
      code: 500,
      msg: '请输入用户id'
    })
  }
  let sql = `delete from sys_user where user_id=${userId}`
  // 路径为http://localhost:8081/user/delete?userId=1
  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 
        })
      }
  })
})
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.file
    if(!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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

我记不住的那些命令(不断更新中)

fzf 一种进行模糊查找的命令行工具 主页:https://github.com/junegunn/fzf 我的主机是 Kali,通过apt进行安装fzf,并进行配置。 # apt install fzf # apt show fzf 通过参考/usr/share/doc/fzf/README.Debian来进行快速配置快捷键和自动补…

属兔人连续两年不顺,运势低迷要化解

属兔人为人生性浪漫,有着美好憧憬, 与人相处的时候总是谦和待人,不会随便发脾气, 也不喜欢与人发生争执,不善于算计别人。 对于自己的另一半,是一个很温暖的人,为人细腻,并且懂得体谅…

[答疑]改善系统的性能,用得着业务建模吗

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2023-10-27 22:02 潘老师,请教一个实践中遇到的问题: 假设生产人员使用某个工具处理数据,需要10天时间;现在改进了这个工具…

【Web 实战】记一次攻防实战

经典开局一个登录框 由于漏洞应该还未修复。对于数据和相关网址打个码见谅一下 常规思路(爆破) 常规操作进行一波 尝试弱口令然后开始爆破 对于此种有验证码的爆破,可以借用一个bp插件。 captcha-killer-modified-jdk14.jar 具体使用我就…

【算法练习Day49】每日温度下一个更大元素 I

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 每日温度下一个更大元素 I总…

【网络】计算机网络基础概念入门

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁&#…

软件测试不是所有人都适合的

测试工作是一项极其重要的质量保证活动,因此测试部门既是软件发布质量把控的出口,也是客户意见反馈的入口。但是因为之前的不重视,导致了软件测试行业的发展相对滞后,优秀的软件测试工程师非常难得。 一个优秀的测试工程师要对一些…

centos8 执行yum install ntpdate命令,报错未找到匹配的参数: ntpdate

1、执行 yum install ntpdate 报错 上次元数据过期检查:1:17:06 前,执行于 2023年11月15日 星期三 10时32分18秒。 未找到匹配的参数: ntpdate 错误:没有任何匹配: ntpdate 报错截图: 2、CentOS8系统中,原有的时间…

ExoPlayer架构详解与源码分析(7)——SampleQueue

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

2024CFA一级二级三级双机构网课资源

复习流程 我自己的复习流程是这样的,按照这个踏实去复习的话100%可以过: 第一轮学习(30-40天左右):把所有reading学习一遍,每天上午看新的reading,下午复习前一天上午学习的reading…

arf_1解题

arf_1解题 镜像环境 version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-file-read-1:latestports:- 80:80新建yml文件将代码保存在当前位置 使用docker-compost up -d 拉取镜像 解题 访问该镜像映射端口为1520 可以看到页面只有一个holle但…

vue中一个页面引入多个相同组件重复请求的问题?

⚠️!!!此内容需要了解一下内容!!! 1、会使用promise??? 2、 promise跟 async 的区别??? async 会终止后面的执行,后续…

【广州华锐互动】地震防灾减灾科普3D虚拟展厅:向公众普及地震安全知识

在面对自然灾害时,我们都需要有足够的知识和准备来保护自己和他人。这就是为什么地震安全知识的普及如此重要。然而,传统的教育方法可能无法满足所有人的需求,特别是在这个数字化的时代。为了解决这个问题,广州华锐互动制作开发了…

微签:电子签章实力派,这19年从幕后走向台前

微签是什么?尽管在电子签章领域已深耕19年 ,是国内电子签名市场的拓荒者之一,但因为其低调的风格,一直不为众人所知。不过,如果现在你想对目前市面上的电子签名厂商做一个专业客观的盘点的话,不管从哪个角度…

优雅写代码之《项目规范》-附加树状图生成

阿丹: 最近有一些小伙伴在跳槽之后接触到了新的项目小组,在讨论如何整理出漂亮的项目结构以及代码书写的时候,既然有小伙伴发问了,那当然就要一起学习,来!开卷!本文章只作为一个分享&#xff0c…

别试错了,是该关注一下软件内在质量了

太多这种例子了,老板们早上出的新想法,恨不得第二天就能上线。。每个互联网公司都试图突破固定领地,不断地尝试新的业务,一旦发现不行,就立刻砍掉,名曰“试错”。 研发部门,为了应对压力&#…

企业传统纸质设备维修方式的痛点以及解决方案

传统的纸质设备维修方式有很多痛点: 数据更新和访问的低效率:传统的纸质记录方法在更新和检索数据时效率极低。这种方式无法实时更新设备的维修状态,导致管理层和维修人员无法及时获取最新信息,影响决策的速度和质量。 记录的易…

SAPRouter Certificate即将过期更新证书

今日收到SAP发的一封邮件提示SAPRouter Certificate即将过期,顺便记录下更新证书的方法步骤。 1、登录SAProuter服务器,用户使用安装SAProuter的用户,我的是saprter用户 进入到/saprouter目录,备份certreq cred_V2 local.pse src…

移动端实现彩色导航

一、所需代码 &#xff08;1&#xff09;html部分 <div class"pres_nav"><ul><li v-for"(item, index) in menuList" :key"item.id" click"topage()" :style"{ backgroundColor: getBackgroundColor(index, li)…

PDF如何转word文档

强烈推荐&#xff1a;Solid Converter PDF https://wzhonghe.com/?p6878#p1 嘎嘎猛&#xff1a; 将PDF文件转换为Word文档并保留原始格式可能会涉及到一些复杂的布局和格式问题。在这里&#xff0c;我将提供一种常见的方法&#xff0c;但请注意&#xff0c;它可能不是100%准…