企业管理系统定制开发Web 开发框架 — Express 精讲(安装使用、静态托管、路由处理、中间件的使用)

         是基于 Node.js 开发的 web 开发框架,是一个 Node.js 模块;企业管理系统定制开发既然是基于 Node.js,那么使用 Express 企业管理系统定制开发的前提就是电脑必须已经安装 Node 环境,Node 企业管理系统定制开发的安装很简单,企业管理系统定制开发此处不再赘述。


目录


一、Express 安装

        企业管理系统定制开发首先创建一个文件夹 study_Express 企业管理系统定制开发作为项目文件,企业管理系统定制开发在文件中创建入口文件 app.js;

企业管理系统定制开发在集成终端中使用命令 npm init -y 企业管理系统定制开发初始化一个 package.json 文件;

使用命令 npm install express -- save 下载 Express;安装成功后如下:

二、Express 使用

        下载 Express 之后,就可以正常使用了,在 app.js 中创建一个应用服务器示例;

  1. // study_Express/app.js
  2. const express = require('express') //require函数引入express包
  3. const app = express() //调用函数
  4. const port = 3000 //设置端口3000
  5. app.get('/', (req, res) => {
  6. res.send('Hello World!') //app对象调用get API,监听根路径 /,有根路径请求时返回“Hello World!”
  7. })
  8. app.listen(port, () => {
  9. console.log(`Example app listening on port ${port}`) //监听3000端口,启动服务后触发回调函数
  10. })

创建完成后启动服务;

此时我们查看本地地址的3000端口,就可以返回“Hello World!”;

以上就是一个最简单的应用服务器。

三、通过 Express 托管静态文件

        所谓托管静态文件就是让图片、文档、js/css/html文件等等可以通过 url 地址来访问;我们新建文件 static.js 来演示静态文件的托管;

  1. // study_Express/static.js
  2. const express = require('express') //require函数引入express包
  3. const app = express() //调用函数
  4. //实现静态资源服务
  5. let server = app.use(express.static('public')) //public就是静态资源的根目录,静态资源放于此文件夹
  6. server.listen(3000, () => { //创建监听
  7. console.log('服务器启动成功...')
  8. })

提示:app.use 语句可以写多条设置多个静态资源的根目录,访问时互不影响。

在以上代码中我们设置的根目录为 public,所以创建此目录并添加示例文件 1.html 和 1.jpg 用于静态托管;

接下来,启动服务;

此时就可以在浏览器中通过 url 来访问我们刚刚添加的静态资源了。

除此之外,我们也可以为访问的路径设置一个虚拟目录,具体做法是在 app.use 后新加一个参数;如下,设置虚拟目录 /express;

let server = app.use('/express',express.static('public')) //use的第一个参数指定虚拟目录(路径)

提示:应用服务器文件无论做任何修改都需要重新启动服务。

接下来在访问静态资源的 url 中也需要加入这个虚拟目录;

 

四、路由处理

        根据请求路径和请求方式进行路径分发处理的就是路由;

        http 的常用请求方式有 post(添加)、get(查询)、put(更新)、delete(删除),即分别对应增删改查操作;我们新建文件 router.js 来演示路由处理:

  1. // study_express/router.js
  2. const express = require('express') //require函数引入express包
  3. const app = express() //调用函数
  4. //四种基本路由处理(处理特定请求)
  5. app.get('/', (req, res) => {
  6. res.send('get数据!')
  7. })
  8. app.post('/', (req, res) => {
  9. res.send('post数据!')
  10. })
  11. app.put('/', (req, res) => {
  12. res.send('put数据!')
  13. })
  14. app.delete('/', (req, res) => {
  15. res.send('delete数据!')
  16. })
  17. //直接使用use分发可以处理所有的路由请求(处理所有请求)
  18. // app.use((req,res) => {
  19. // res.send('ok!')
  20. // })
  21. app.listen(3000, () => { //创建监听
  22. console.log('router服务器启动成功...')
  23. })

接下来进行接口测试,由于浏览器不太方便,这里我使用的是 ApiPost

补充: ApiPost 测试接口方法

首先在 ApiPost 正常登录; 

随后新建目录 --> 鼠标右键 --> 新建 --> 新建接口;

输入接口地址,我们使用的是本地地址、3000端口;

输入地址后,启动服务器;

接下来选择发送方式进行测试:

测试结果如下:

五、Express 中间件

        中间件是一个函数,它可以访问请求对象(request objeck(req))、响应对象(response object(res)) ,和 Web 应用中处于请求 · 响应循环流程中的中间件;

        中间件还有第三个参数 next,用于将此请求传递到下一环节;从本质上来说,一个 Express 应用就是在调用各种中间件。中间件分为以下几种:

  • 应用级中间件(app.use)
  • 路由级中间件(app.get/post...)
  • 错误处理中间件
  • 内置中间件(如我们之前使用的静态资源托管 static 就是内置中间件)
  • 第三方中间件

1. 应用级中间件

        应用级中间件绑定到 app对象 使用 app.use() 和 app.METHOD();

        新建 1.js 文件进行演示,通过三个中间件来实现访问 /user 路径,记录访问时间、访问日志以及访问次数。

  1. // study_Express/1.js
  2. const express = require('express') //require函数引入express包
  3. const app = express() //调用函数
  4. let total = 0; //访问量
  5. //应用级中间件
  6. app.use('/user', (req, res, next) => { //第一个中间件
  7. console.log('访问时间:' + Date.now()) //记录访问时间
  8. next() //进入下一个中间件,不使用next则不会执行下面的中间件
  9. })
  10. app.use('/user', (req, res, next) => { //第二个中间件
  11. console.log('日志:×××访问了/user') //记录访问日志
  12. next()
  13. })
  14. app.use('/user', (req, res) => { //第三个中间件
  15. total++; //访问次数增加
  16. console.log('当前访问量:' + total)
  17. res.send('返回结果')
  18. })
  19. app.listen(3000, () => { //创建监听
  20. console.log('中间件服务器启动成功...')
  21. })

启动服务后访问 /user 路径;

此时后台会打印出相关信息,每刷新一次,次数加一;

2. 路由级中间件

        新建文件 2.js 进行演示,使用两个中间件打印出1、2。

  1. // study_Express/2.js
  2. const express = require('express') //require函数引入express包
  3. const app = express() //调用函数
  4. //路由级中间件
  5. app.get('/luyou', (req, res, next) => {
  6. console.log(1)
  7. next()
  8. })
  9. app.get('/luyou', (req, res) => {
  10. console.log(2)
  11. })
  12. app.listen(3000, () => { //创建监听
  13. console.log('路由级中间件服务器启动成功...')
  14. })

启动服务后访问 /luyou 路径;

后台打印出结果;

此外,路由级中间件中调用 next 时,可以加一个 route 参数 next('route'),意为跳转至下一个路由;

注意区分:

        next();跳转至下一个中间件。

        next('route');跳转至下一个路由,所谓下一个路由就是通过 get、post  或者其他方式所绑定的路由。

如下面这种写法:

  1. const express = require('express') //require函数引入express包
  2. const app = express() //调用函数
  3. //路由级中间件
  4. app.get('/luyou', (req, res, next) => { //第一个中间件 第一个路由
  5. console.log(1)
  6. next('route') //跳转至下一个路由
  7. }, (req, res) => { //第二个中间件
  8. console.log(2)
  9. })
  10. app.get('/luyou', (req, res) => { //第三个中间件 第二个路由
  11. console.log(3);
  12. res.send('路由级中间件返回结果')
  13. })
  14. app.listen(3000, () => { //创建监听
  15. console.log('路由级中间件服务器启动成功...')
  16. })

第一个中间件和第二个中间件进行了嵌套,只使用了一个路由,在第一个中间件中使用了 next('route'); 直接跳到了下一路由,所以第二个中间件的结果 2 就不会打印了,如下:

3. 错误处理中间件

        错误处理中间件需要4个参数,必须提供四个参数以将其标识为错误处理中间件函数。即使不需要使用 next 对象,也必须指定它。否则,该 next 对象将被解释为常规中间件并且无法处理错误。格式如下:

  1. app.use(function (err, req, res, next) {
  2. console.error(err.stack)
  3. res.status(500).send('Something broke!')
  4. })

4. 第三方中间件 —— body-parser

        第三方中间件有很多,在这里我们重点演示参数传递 body-parser,其余第三方中间件用法相同;

首先 npm 安装 body-parser,终端中中使用命令 npm install body-parser --save

安装成功后会在 package.json 文件中显示;

新建文件 3.js 进行演示,实现简易的登录表单验证功能;

  1. // study_Express/3.js
  2. const express = require('express') //require函数引入express包
  3. const app = express() //调用函数
  4. const bodyParser = require('body-parser') //引入body-parser
  5. //挂载(启用)内置中间件static,托管静态资源
  6. app.use(express.static('public'))
  7. //挂载参数处理中间件(此处解析post表单提交的数据)
  8. app.use(bodyParser.urlencoded({
  9. extended: false
  10. }))
  11. //处理get提交的数据
  12. // app.get('/login', (req, res) => {
  13. // let data = req.query;
  14. // console.log(data);
  15. // res.send('get提交时的数据')
  16. // })
  17. //处理post提交的数据
  18. app.post('/login', (req, res) => {
  19. let data = req.body;
  20. if (data.username == '前端小马' && data.password == '123456') {
  21. res.send('登录成功!')
  22. } else {
  23. res.send('用户名或密码错误!')
  24. }
  25. })
  26. app.listen(3000, () => {
  27. console.log('第三方中间件服务启动...')
  28. })

为了展示效果,我们在目录 public 下新建一个 html 文件来制作表单,并托管它;

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>表单</title>
  6. <style></style>
  7. </head>
  8. <body>
  9. <form action="http://localhost:3000/login" method="post">
  10. 用户:<input type="text" name="username"><br>
  11. 密码:<input type="password" name="password"><br>
  12. <input type="submit" value="提交">
  13. </form>
  14. </body>
  15. </html>

启动服务后访问 /login.html,可以正常验证:

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发