模块加载机制 + express获取参数的形式 + JSON和CORS的区别

模块加载机制

优先从缓存中加载

  • 当一个模块初次被 require 的时候,会执行模块中的代码,当第二次加载相同模块的时候,会优先从缓存中查找,看有没有这样的一个模块!
  • 好处:提高模块的加载速度;不需要每次都重新执行并加载模块!

核心模块的加载机制

  • 先查找缓存;如果缓存中没有,再去加载核心模块;

用户模块的加载机制

  • 先查找缓存;

  • 如果缓存中没有则尝试加载用户模块;

  • 如果在加载用户模块时候省略了后缀名,则:

    • 首先,严格按照指定的名称去查找
    • 其次,尝试加载后缀名是 .js 的文件
    • 如果没有.js的文件,则尝试加载 .json 结尾的文件
    • 如果没有 .json 的文件,则尝试加载 .node 结尾的文件
    • 查找规则:index -> index.js -> index.json -> index.node

第三方模块的加载机制【了解】

  1. 先在项目根目录中查找node_modules文件夹
  2. node_modules文件夹下,查找模块相关的文件夹
  3. 在对应的文件夹下,查找package.json的文件
  4. 查找package.json文件中的main属性(指定了模块的入口文件)
  5. 如果找到了main属性,同时,main属性指定的文件路径存在,那么尝试加载指定的文件模块
  6. 加入没有main属性,或者main属性对应的文件不存在,或者没有package.json,那么会依次尝试加载index.jsindex.json,index.node;
  7. 如果没有index相关的文件,或者没有指定模块对应文件夹,或者,当前项目根目录中没有node_modules文件夹,则向上一层目录中查找node_modules,查找规则同上!
  8. 最后,如果在项目所在磁盘的盘符根目录中,还找不到对应模块,则报错:cannot find module

1. express中获取参数的几种形式

项目

  1. 初始化项目:npm init -y
  2. 安装express服务器:npm install express -S

index.js

const express = require('express')
const bodyParser = require('body-parser')
const app = express()

// 注册 body-parser 中间件,来解析Post提交过来的表单数据
app.use(bodyParser.urlencoded({ extended: false }))

/*
  监听客户端的 get 请求
  http://127.0.0.1:3001/user?id=10&name=zs
*/
app.get('/user', (req, res) => {
  // 服务器,可以直接通过 req.query 属性,获取到客户端提交到服务器的 查询参数
  console.log(req.query)
  res.send('ok')
})

/*
   URL 规则中的 : 表示参数项
   监听客户端的 get 请求:http://127.0.0.1:3001/user/10/zs
*/
app.get('/user/:id/:name', (req, res) => {
  console.log(req.params)
  res.send('ok')
})

// 监听客户端 post 请求:从post表单中获取提交的数据
app.post('/user', (req, res) => {
  // 注意:如果在项目中,想要通过 req.body 获取客户端提交的表单数据,
  // 必须 先注册 body-parser 中间件才可以!
  console.log(req.body)
  res.send('ok')
})

app.listen(3001, () => {
  console.log('server running at http://127.0.0.1:3001')
})

  1. 获取 http://127.0.0.1:3001/user?id=10&name=zs 中的查询参数:
    • 直接使用 req.query 获取参数即可;
    • 注意:URL 地址栏中通过 查询字符串 传递的参数,express 框架会直接解析,大家只需要使用 req.query 直接获取 URL 中 查询字符串的参数;
  2. 从URL地址中获取路径参数:
    • 假设后台的路由是 app.get('/user/:id/:name', (req, res) => {})
    • 假设客户端浏览器请求的URL地址为:http://127.0.0.1:3001/user/10/zs
    • 直接使用 req.params 可以获取URL地址中传递过来的参数;
  3. 从post表单中获取提交的数据:
    • 借助于body-parser来解析表单数据
    • 安装:npm i body-parser -S
    • 导入:const bodyParser = require('body-parser')
    • 注册中间件:app.use(bodyParser.urlencoded({ extended: false }))
    • 使用解析的数据: req.body 来访问解析出来的数据

2. Web 开发模式

2.1 混合模式(传统开发模式)

  • 以后端程序员为主,基本上不需要前端程序员,或者,前端程序员只负责画页面、美化样式、写JS特效,前端程序员不需要进行数据的交互;
  • 这种开发模式,在早些年比较常见;
  • 传统开发模式下,用的最多的是 Jquery + 模板引擎 + Bootstrap
  • 后端页面 .php .jsp .aspx .cshtml

2.2 前后端分离(趋势)

  • 后端负责操作数据库、给前端暴露接口
  • 前后端分离的好处:保证了各个岗位的职责单一;
  • 前端负责调用接口,渲染页面、前端就可以使用一些流行的前端框架 Vue, React, Angular

3. JSONP 和 CORS 的区别

  1. JSONP的原理:动态创建script标签;
    • JSONP发送的不是Ajax请求
    • 不支持 Post 请求;
  2. CORS中文意思是跨域资源共享 ,需要服务器端进行 CORS 配置;
    • CORS 发送的是真正的Ajax请求
    • CORS 支持Ajax的跨域
    • 如果要启用 CORS 跨域资源共享,关键在于 服务器端,只要 服务器支持CORS跨域资源共享,则 浏览器肯定能够正常访问 这种 CORS 接口;而且,客户端在 发送 Ajax的时候,就像发送普通AJax一样,没有任何代码上的变化;
  3. 对于Node来说,如果想要开启 CORS 跨域通信,只需要安装cors的模块即可;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花流雨

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值