从0到1利用express搭建后端服务

目录

  • 1 架构的选择
  • 2 环境搭建
  • 3 安装express
  • 4 创建启动文件
  • 5 express的核心功能
  • 6 加入日志记录功能
  • 7 日志记录的好处
  • 本节代码
  • 总结

不知不觉学习低代码已经进入第四个年头了,既然低代码很好,为什么突然又自己架构起后端了呢?我有一句话叫低代码不够,代码来凑。

低代码现在看来也并不是21出现的时候打的旗号是人人都是开发者,效率高的不行。目前看,发展的道路是曲折的,想依靠低代码一比一实现代码实现的项目还是比较困难的。

困难是暂时的,办法总是要有的,那就有了自己架构后端能力的想法。

1 架构的选择

就像我们做饭一样,先要看菜谱,然后才是选购食材,然后才是按照方法练习。后端架构也是一样,选择什么技术路线,选用什么样的组件,怎么一步步的实现功能。

我们这次后端的架构是选用的express,为啥要选他?因为学习低码的过程你是不得不把Js完整学下来的,既然js已经很熟练了,那么选择一样的技术栈里的技术就省了不少劲。

再者express属于轻量级的后端框架,不需要学习过多的技术概念,马上就可以实践。

2 环境搭建

express要求你先安装好nodejs,我这里选择安装20版本,保持最新就可以,我们学习么,学点新的东西。

nodej安装比较简单,从官网下载安装包下一步安装就行,安装完了,用命令验证一下

node -v
npm -v

在这里插入图片描述
然后需要在我们的硬盘的盘符里创建一个工程目录,比如我这里创建在D盘下的code目录下的expressbackend
在这里插入图片描述
在当前目录的地址栏,我们输入cmd就快捷的打开了命令行窗口
在这里插入图片描述
在命令行窗口里输入npm初始化的命令

npm init

在这里插入图片描述
一路回车,到最终结果,文件夹会多出一个package.json文件,注意的是有个地方是选入口文件,我们的nodejs通常命名为app.js,注意这里要改一下
在这里插入图片描述
在这里插入图片描述

3 安装express

要用express开发,先需要引入框架,在我们的工程目录,在cmd里输入

npm install express

在这里插入图片描述
库安装好之后会生成一个node_moodules文件夹,里边放着我们引用的第三方的库
在这里插入图片描述

4 创建启动文件

库安装好之后,就可以创建启动文件了,在工程目录创建一个app.js
在这里插入图片描述
框架搭建好之后我们就可以开始写代码了,一般是使用IDE去写,打开我们的vscode,选择open folder打开我们的工程目录
在这里插入图片描述
在这里插入图片描述
要使用库先需要引入,通过require语句引入库,然后再启动服务,输入如下代码

const express = require('express')
const app = express()app.get('/',(req,res)=>{res.send('hello,world')
})const PORT = 3000app.listen(PORT,()=>{console.log(`express start in ${PORT}`)
})

然后在vscode里新建一个terminal,输入启动命令
在这里插入图片描述

node app.js

控制台打印了服务已经在3000端口启动,打开浏览器输入http://localhost:3000,看到hello,world表示服务已经启动成功
在这里插入图片描述

5 express的核心功能

express提供了路由和中间件核心功能,路由是让我们可以按照不同的路径来调用不同的后端服务,比如我们可以访问/auth/login来实现用户的登录,访问/auth/signUp实现注册用户。

而中间件可以拦截请求进行各种校验,比如我们可以加入日志功能,记录我们的请求日志,加入token验证功能来验证token是否过期,加入跨域验证来解决跨域访问的问题

为了代码清晰,我们将中间件和路由分别拆分到不同的文件夹里,可以在根目录创建middleware表示中间件,创建routes表示路由

在这里插入图片描述

6 加入日志记录功能

在中间件里我们先加入日志记录功能,让每次访问接口的时候都能记录下请求信息,在middleware文件夹下创建logger.js
在这里插入图片描述
现在的terminal已经用来启动服务了,我们再创建一个terminal用来安装日志的包morgan
在这里插入图片描述

npm install morgan

然后输入如下代码

const morgan = require('morgan');  
const fs = require('fs');  
const path = require('path');  // 创建日志文件的路径  
const logFile = path.join(__dirname, '..', 'access.log');  // 创建一个可写流,用于将日志写入文件  
const accessLogStream = fs.createWriteStream(logFile, { flags: 'a' });  // 配置morgan,使用自定义的日志格式,并将日志输出到文件  
const logFormat = ':remote-addr - :date[iso] ":method :url HTTP/:http-version" :status :res[content-length] - :response-time ms'
const logger = morgan(logFormat, { stream: accessLogStream });  module.exports = logger;

这段代码的意思是在根目录创建一个access.log,然后每次请求都追加进来

日志文件弄好之后,就需要在app.js里引入日志中间件,在app.js加入如下代码

const logger = require('./middleware/logger');
app.use(logger)

加入之后重新启动服务,然后再次在浏览器里访问http://localhost:3000
在这里插入图片描述
就可以看到根目录下多了一个access.log并且文件里记录了我们请求的信息

7 日志记录的好处

我们通过记录用户的访问日志,也可以从侧面了解应用的运行情况,如果其中大量出现服务报错或者频繁访问的情况,就可以初步判定系统正在遭受攻击,也可以有效的应对。

再一个就是如果用户访问接口总是报错,有可能有潜在的问题,也是诊断线上故障的一个辅助手段,可以记录用户实际的一个路径。

本节代码

app.js

const express = require('express')
const app = express()
const logger = require('./middleware/logger');
app.use(logger)
app.get('/',(req,res)=>{res.send('hello,world')
})const PORT = 3000app.listen(PORT,()=>{console.log(`express start in ${PORT}`)
})

logger.js

const morgan = require('morgan');  
const fs = require('fs');  
const path = require('path');  // 创建日志文件的路径  
const logFile = path.join(__dirname, '..', 'access.log');  // 创建一个可写流,用于将日志写入文件  
const accessLogStream = fs.createWriteStream(logFile, { flags: 'a' });  // 配置morgan,使用自定义的日志格式,并将日志输出到文件  
const logFormat = ':remote-addr - :date[iso] ":method :url HTTP/:http-version" :status :res[content-length] - :response-time ms'
const logger = morgan(logFormat, { stream: accessLogStream });  module.exports = logger;

总结

我们本篇讲解了express的搭建和启动过程,演示了一个日志记录功能的搭建流程,后续还会介绍其他中间件已经路由的搭建过程,敬请期待。

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

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

相关文章

javaWeb项目-旅游民宿管理平台系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JSP技术 JSP(Jav…

视频素材免费无水印软件有哪些?视频素材免费下载素材库

在这个视觉为王的时代,一段精彩的视频能够跨越语言和文化的障碍,触动每一个心灵。对于每一位热血沸腾的视频创作者而言,寻找那些高质量无水印的素材,就像是在无尽的创意海洋中航行,在这段旅程中,我为你精选…

Polar靶场web(三)

期待得到某一件事物的时候,才是最美好的。 签到 发现不能提交,看一下f12 发现提交按钮被禁用了,且最大输入9个字符,我们可以改一下。 现随便提交一个发现要提交ilovejijcxy session文件包含 发现有文件包含,那先包含…

互联网医院APP开发攻略:搭建智能医疗平台

互联网医院APP为患者提供了便捷的就医途径,还为医生和医院提供了更加高效的服务和管理手段。接下来,小编将我们本文将就互联网医院APP的开发攻略,以及如何搭建智能医疗平台进行探讨。 1.确定需求和目标 这包括确定服务对象(患者、…

NO12 蓝桥杯单片机实践之DS1302

1 回顾 DS1302使用电子时钟模式时,使用方法为: (1)将读写寄存器的地址写成数组 (2)时间参数写成数组 (3)调用函数来进行读取实时时间(底层代码.c文件) 2…

一文读懂Unity性能分析工具:MemoryProfiler,教你轻松分析项目性能瓶颈

轻松掌握MemoryProfiler MemoryProfiler的基本概念如何获取MemoryProfileMemoryProfiler内存分析实践正常GC,合理释放对象的引用无法正常GC,对象引用没有合理释放。 总结 MemoryProfiler的基本概念 Unity 性能分析器 (Unity Profiler) 是一种可以用来获取应用程序性…

C语言结构体详解

前言: 何为结构体,结构体又是什么呢,相信有很多小伙伴对结构体还没有一个清楚的概念,今天咱也一起来探讨一下何为结构体,在C语言当中有着许多的数据类型,如char,int,long&#xff0c…

成都欣丰洪泰文化传媒有限公司电商服务的行业先锋

在当今电商行业风起云涌的时代,成都欣丰洪泰文化传媒有限公司凭借其深厚的行业积淀和敏锐的市场洞察力,已经崭露头角,成为众多电商企业争相合作的对象。欣丰洪泰不仅专注于电商服务,更是以其专业的服务理念和创新的营销策略&#…

软考102-上午题-【信息安全】-杂题+小结

一、杂题 真题1: 真题2: 真题3: 真题4: 真题5: 真题6:

【JavaEE】Thread类中run和start的区别

文章目录 先说结论Run方法Start方法 先说结论 当你想要创建一个新的线程并执行某些任务时,你应该重写run方法以提供任务的具体实现,并通过调用start方法来启动新线程 run方法包含了线程应该执行的代码,但直接调用它并不会启动新的线程。 s…

yolov5目标检测可视化界面pyside6源码(无登录版)

这个是yolov5pyside6实现目标检测可视化的代码,本套项目没有用户登录的功能,如需用户登录版,看另一篇文章:yolov5pyside6登录用户管理目标检测可视化源码_yolov5用户登入功能-CSDN博客

java入门学习Day02

本文介绍的内容主要有:java的注释(样式)、关键字、字面量。 一、java中的注释 1、基本语法 ① 单行注释 //注释信息 ② 多行注释 /* 注释信息1 注释信息2, */ ③ 文档注释 /** 注释信息1 注释信息2, */ public class…