天天看点

Node.js 第3天 --- exports 和 module.exports ,each和forEach的区别

  • 知识点

    • 增删改查
    • 登陆
    • 注册
    • 头像
    • 服务端图片
    • 水印
    • 图片水印
    • 找回密码
    • 密码修改
  • 模块系统

    • 核心模块
    • 第三方模块
    • 自己写的模块
    • 加载规则以及加载机制
    • 循环加载
  • npm

  • package.json

  • Express

    • 第三方 Web 开发框架
    • 高度封装了 http 模块
    • 更加专注于业务,而非底层细节
    • 知其所以然
  • 增删改查
    • 使用文件来保存数据(锻炼异步编码)
  • MongoDB
    • (所有方法都封装好了)

复习

  • 网站开发模型

    • 黑盒子、哑巴
    • 写代码让它变得更智能
    • 按照你设计好的套路供用户使用
  • 在 Node 中使用 art-template 模板引擎

    • 安装
    • 加载
    • template.render()
  • 客户端渲染和服务端渲染的区别

    • 最少两次请求,发起 ajax 在客户端使用模板引擎渲染
    • 客户端拿到的就是服务端已经渲染好的
  • 处理留言本案例首页数据列表渲染展示

  • 处理留言本案例发表留言功能

    • 路径
    • 设计好的请求路径
    • $GET 直接或查询字符串数据
    • Node 中需要咱们自己动手来解析
      • url.parse()
    • /pinglun?name=jack&message=hello
    • split(’?’)
    • name=jack&message=hello
    • split(’&’)
    • name=jack message=hello
    • forEach()
    • name=jack.split(’=’)
    • 0 key
    • 1 value
  • 掌握如何解析请求路径中的查询字符串

    • url.parse()
  • 如何在 Node 中实现服务器重定向

    • header(‘location’)
      • 301 永久重定向 浏览器会记住
        • a.com b.com
        • a 浏览器不会请求 a 了
        • 直接去跳到 b 了
      • 302 临时重定向 浏览器不记忆
        • a.com b.com
        • a.com 还会请求 a
        • a 告诉浏览器你往 b
  • Node 中的 Console(REPL)使用

上午总结

  • jQuery 的 each 和 原生的 JavaScript 方法 forEach

    • EcmaScript 5 提供的
      • 不兼容 IE 8
    • jQuery 的 each 由 jQuery 这个第三方库提供
      • jQuery 2 以下的版本是兼容 IE 8 的
      • 它的 each 方法主要用来遍历 jQuery 实例对象(伪数组)
      • 同时它也可以作为低版本浏览器中 forEach 替代品
      • jQuery 的实例对象不能使用 forEach 方法,如果想要使用必须转为数组才可以使用
      • [].slice.call(jQuery实例对象)

  • 模块中导出多个成员和导出单个成员

  • 301 和 302 状态码区别

    • 301 永久重定向,浏览器会记住
    • 302 临时重定向
  • exports 和 module.exports 的区别

    • 每个模块中都有一个 module 对象
    • module 对象中有一个 exports 对象
    • 我们可以把需要导出的成员都挂载到 module.exports 接口对象中
    • 也就是:

      moudle.exports.xxx = xxx

      的方式
    • 但是每次都

      moudle.exports.xxx = xxx

      很麻烦,点儿的太多了
    • 所以 Node 为了你方便,同时在每一个模块中都提供了一个成员叫:

      exports

    • exports === module.exports

      结果为

      true

      s
    • 所以对于:

      moudle.exports.xxx = xxx

      的方式 完全可以:

      expots.xxx = xxx

    • 当一个模块需要导出单个成员的时候,这个时候必须使用:

      module.exports = xxx

      的方式
    • 不要使用

      exports = xxx

      不管用
    • 因为每个模块最终向外

      return

      的是

      module.exports

    • exports

      只是

      module.exports

      的一个引用
    • 所以即便你为

      exports = xx

      重新赋值,也不会影响

      module.exports

    • 但是有一种赋值方式比较特殊:

      exports = module.exports

      这个用来重新建立引用关系的
    • 之所以让大家明白这个道理,是希望可以更灵活的去用它
  • Node 是一个比肩 Java、PHP 的一个平台

    • JavaScript 既能写前端也能写服务端
moudle.exports = {
  a: 123
}

// 重新建立 exports 和 module.exports 之间的引用关系
exports = module.exports

exports.foo = 'bar'
           
Array.prototype.mySlice = function () {
  var start = 0
  var end = this.length
  if (arguments.length === 1) {
    start = arguments[0]
  } else if (arguments.length === 2) {
    start = arguments[0]
    end = arguments[1]
  }
  var tmp = []
  for (var i = start; i < end; i++) {
    // fakeArr[0]
    // fakeArr[1]
    // fakeArr[2]
    tmp.push(this[i])
  }
  return tmp
}

var fakeArr = {
  0: 'abc',
  1: 'efg',
  2: 'haha',
  length: 3
}

// 所以你就得到了真正的数组。 
[].mySlice.call(fakeArr)
           

下午总结

  • jQuery 的 each 和 原生的 JavaScript 方法 forEach
  • 301 和 302 的区别
  • 模块中导出单个成员和导出多个成员的方式
  • module.exports 和 exports 的区别
  • require 方法加载规则
    • 优先从缓存加载
    • 核心模块
    • 路径形式的模块
    • 第三方模块
      • node_modules
  • package.json 包描述文件
    • dependencies 选项的作用:依赖
  • npm 常用命令
  • Express 基本使用

继续阅读