• NODEJS 高级使用 http模块 express框架 路由 web服务器 中间件


    目录

    http模块

    框架

    express 框架

    创建web服务器

    路由

    params传递

    路由器

     web服务器

    中间件

    应用级中间件

    路由级中间件

    内置中间件


     

    http模块

    • req.url        获取请求的资源,
    • req.method        获取请求的方法

    框架

    一套解决方案,

    express 框架

    Express - 基于 Node.js 平台的 web 应用开发框架 - Express 中文文档 | Express 中文网

    属于第三方模块,需要下载安装

    npm install express

    创建web服务器

    1. // 引入express模块
    2. const express = require("express");
    3. // console.log(express);
    4. // 创建web服务器
    5. const app = express();
    6. // 设置端口
    7. app.listen(3000, () => {
    8. console.log("服务器启动成功");
    9. });

    路由

    监听特定的请求,组成,请求的URL,请求的方法,回调函数

    • res.send()设置响应内容并发送
    • res.redirect()设置响应的重定向,跳转另一个URL
    • res.sendFile(__dirname+'/path')响应一个文件,路径必须使用绝对路径

    params传递

    1. // 引入express模块
    2. const express = require("express");
    3. // 创建web服务器
    4. const app = express();
    5. // 设置端口
    6. app.listen(3000);
    7. //添加路由,
    8. //params传参需要在路由中设置参数名
    9. app.get("/search/:wd", (req, res) => {
    10. // 获取params传递的参数
    11. var obj = req.params;
    12. res.send("搜索成功"+obj.wd);
    13. console.log(obj);
    14. });

    路由器

    1. 1.路由器
    2. //(1)引入express模块
    3. //(2)创建路由器对象
    4. const router = express.Router()
    5. //(3)往路由器对象添加路由
    6. //(4)暴露路由器对象
    7. module.exports = router

     web服务器

    1. //(1)引入路由器模块
    2. //(2)挂载引入的路由器
    3. app.use( URL前缀, 路由器 )

     

    中间件

    用来拦截对web服务器的请求,中间件分为应用级中间件,路由级中间件,内置中间件,第三方中间件,错误处理中间件

    应用级中间件

    一个函数,一旦拦截到以后会自动调用这个函数

    1. // 引入express模块
    2. const express = require('express')
    3. const app = express()
    4. app.listen(3000)
    5. function fn(req, res, next) {
    6. console.log('拦截了对/list请求');
    7. var obj = req.query
    8. console.log(obj);
    9. if (obj.user !== 'root') {
    10. res.send('请提供管理员账号')
    11. } else {
    12. // 否则是管理员,允许继续执行
    13. next()
    14. }
    15. }
    16. // 添加中间件,拦截/list的请求
    17. app.use('/list', fn)
    18. app.use('/delete', fn)
    19. app.get('/list', (req, res) => {
    20. res.send('这是所有用户列表,只有管理员权限')
    21. })
    22. // 添加中间件,拦截删除用户路由,验证用户身份是否为管理员
    23. // 添加删除用户的路由(get /delete),响应删除成功
    24. app.get('/delete', (req, res) => {
    25. res.send('删除成功')
    26. })
    27. function discount(req, res, next) {
    28. console.log('拦截对/shopping的请求');
    29. // 获取get传递的参数
    30. console.log(req.query);
    31. // 打9折
    32. req.query.price *= 0.9
    33. // 往后执行
    34. next()
    35. }
    36. app.use('/shopping', discount)
    37. // 添加路由(get /shopping)
    38. app.get('/shopping', (req, res, next) => {
    39. var obj = req.query
    40. console.log(obj);
    41. res.send('商品的价格:' + obj.price)
    42. // 往后执行
    43. next()
    44. })
    45. // 后置中间件
    46. app.use((req, res) => {
    47. console.log('后置中间件');
    48. })

    路由级中间件

    当拦截到URL以后,到指定的路由器下查找路由

    app.use(拦截的URL,路由器)

    内置中间件

    express提供的中间件,就是内置中间件

    post传参转为对象

    托管静态资源,客户端如果要请求静态资源,不需要通过路由去响应文件,服务器把静态资源放入到一个指定的目录下,让客户端自动去查找

    app.use(express.static(‘托管的目录’))

    1. // 引入express模块
    2. const express = require('express')
    3. // 创建web服务器
    4. const app = express()
    5. // 引入用户登录路由器模块
    6. const ur = require("./05_user");
    7. // 设置端口
    8. app.listen(3000)
    9. // 托管静态资源
    10. app.use(express.static('public'))
    11. // 将post传递的参数转换为中间件
    12. app.use(express.urlencoded({
    13. extended: true
    14. }))
    15. // 编写用户路由器,创建路由器对象,将用户登录的路由添加到该路由器下,暴露路由器对象
    16. // 在web服务器下引入用户路由器,挂在路由器,并添加前缀/user
    17. // /user/mylogin
    18. // 挂载路由器
    19. // 路由添加前缀 /user/mylogin
    20. app.use("/user", ur);
    1. // 引入express模块
    2. const express = require("express");
    3. // 创建路由器对象
    4. const router = express.Router();
    5. // // 路由器添加路由
    6. // // 商品列表(get / list)
    7. // router.get("/mylogin", (req, res) => {
    8. // res.send("这是商品列表");
    9. // });
    10. // 添加路由,监听按钮提交的请求
    11. router.post('/mylogin', (req, res) => {
    12. // 获取post传递的参数
    13. var obj = req.body
    14. res.send(`登陆成功!欢迎:${obj.user}`)
    15. })
    16. // 将路由器对象暴露出去
    17. module.exports = router;
  • 相关阅读:
    学习c++的第十天
    基于Python个人博客系统设计与实现 开题报告
    App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
    向毕业妥协系列之机器学习笔记:无监督学习-异常检测
    【软考-软件设计师精华知识点笔记】第十一章 法律法规与标准化
    POI及EasyExcel【Java提高】
    java169-DatagramPacket 数据报包类
    部署ELK集群
    【元宇宙欧米说】从GameFi的视角讨论Web2到Web3的利弊
    2G大小的GPU对深度学习的加速效果如何?
  • 原文地址:https://blog.csdn.net/weixin_49739911/article/details/127382020