node.js three day

  1. 软件版本号是什么: 它涉及到软件工程学理论,一般为0.0.0 格式
    第一个表示有重大改变,第二个增加功能吗,第三个修改小bug

  2. 模板引擎里面的each遍历,是模板字符串的语法

		{{each 要遍历的数组或者对象数据}}   
		 <li> {{$value}} </li>
		{{/each}}

forEach是ecmascript中的一个数组遍历函数,是原生javascript支持的遍历

而jq里面的数组遍历是 each方法

$.each(数组,function(index,item){})
$('div').each(function(){})  一般用于遍历jq伪数组对象
array.foreach(function(item,index){})   
foreach 不能够遍历伪数组对象,因为对象的原型链中 object.prototype没有forerach对象,
jq的实例对象不能使用foreache 方法
只能转换后才可以遍历  array.slice.call($('div'))

slice(start,end) 方法传进起始参数和结束参数,截取中间的值返回一个数组

原理
Array.prototype.mySlice = function(){
	var start = 0 
	var end =this.length
	if(artuments.length === 1 ){
		start = artuments[0]
	}else if(artuments.length ===2){
		start = artuments[0]
		end = artuments[1]
	}
	var tmp = []
	for(var i = start;i < end ; i++){
		tmp.push(this[i])
	}
	return tmp
}


  1. 复习 :
  • 客户端渲染和服务端渲染的区别
    • 最少两次请求,发起 ajax 在客户端使用模板引擎渲染
    • 客户端拿到的就是服务端已经渲染好的
  • 路径
  • 设计好的请求路径
  • $GET 直接或查询字符串数据 (php中已经把底层功能给我们实现出来)
  • Node 中需要咱们自己动手来解析
url.parse()解析原理: 利用split的方法,来切割字符
  + /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 临时重定向 浏览器不记忆

    301 eg: 新浪微博输入地址.com 它再第一次请求时会加载到.com.cn,并且把它记录缓存下拉
    下次直接请求网址的时候就从缓存里直接访问,减少资源占用,耗费性能。

  • Node 中的 Console(REPL)使用
    可以高亮显示

  1. require
    执行被加载的模块中的代码
    得到被加载模块中的exports导出接口对象
    exports 默认返回的是一个空对象
    Node中是模块作用域,默认文件中所有的成员只在当前文件模块有效
    对于希望可以被其他模块访问的成员,我们就需要把这些公开的成功挂载到exports接口对象中去
模块的基本使用规则: 
导出单个模块
module.export.add = add 

导出多个模块(必须在对象中)
module.export = {

	add : function(){

	},
	str :'sfas'
}

也可以
 exports.a = 123
  exports.b = 'fsa'
  exports.c = function(){

  	foo : 'safas'
  }

(这样的优势是随时可以添加删除)
同样它也有后者覆盖前者的特性

在这里插入图片描述

在模块里定义了 exports = module.exports 为了方便操作
在一个模块需要导出单个成员的时候,这个时候必须使用module.exports = xxx
而不是exports =xxx ,这个不管用
每个模块最终返回的结果就是 return module.exports
而 ‘exports’ 只是 'module.exports’的一个引用,即使3exports重新赋值
也不管用 特殊的引用 exports = module.exports ,建立引用关系

exports = function 这是赋值
exports.foo = 这是添加
如果这时 exports或者module.exports = {},也就是重新赋值
则就改变了它的地址,也就是开辟了新空间,这是这两个就不相等。

数据缓存优先级: 如果本地已经缓存有数据,就直接使用数据

require的加载规则: 如果是加载文件 就要加入 ./ or …/
模块 直接模块名字
不要用绝对路径

  1. count为常量,不可变,不可修改

  2. require的加载规则,也就是模块是如何加载进来使用的
    他就像原型链和css中子元素继承父级元素的属性的规则一样,一步一步往上爬,往上找

  3. 如果是非路径形式的模块标识
    路径形式的模块:
    ./ 当前目录,不可省略
    …/ 上一级目录,不可省略
    /xxx 几乎不用
    d:/a/foo.js 几乎不用
    首位的 / 在这里表示的是当前文件模块所属磁盘根路径
    .js 后缀名可以省略
    require(’./foo.js’)

  4. 核心模块的本质也是文件
    核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了
    require(‘fs’)
    require(‘http’)

第三方模块
凡是第三方模块都必须通过 npm 来下载
使用的时候就可以通过 require(‘包名’) 的方式来进行加载才可以使用
不可能有任何一个第三方包和核心模块的名字是一样的
既不是核心模块、也不是路径形式的模块
先找到当前文件所处目录中的 node_modules 目录
node_modules/art-template
node_modules/art-template/package.json 文件
node_modules/art-template/package.json 文件中的 main 属性
main 属性中就记录了 art-template 的入口模块
然后加载使用这个第三方包
实际上最终加载的还是文件

如果 package.json 文件不存在或者 main 指定的入口模块是也没有
则 node 会自动找该目录下的 index.js
也就是说 index.js 会作为一个默认备选项

如果以上所有任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找
如果上一级还没有,则继续往上上一级查找
。。。
如果直到当前磁盘根目录还找不到,最后报错:
  can not find module xxx

var template = require(‘art-template’)

注意:我们一个项目有且只有一个 node_modules,放在项目根目录中,这样的话项目中所有的子目录中的代码都可以加载到第三方包
不会出现有多个 node_modules
模块查找机制
在这里插入图片描述
优先从缓存加载
核心模块
路径形式的文件模块
第三方模块
node_modules/art-template/
node_modules/art-template/package.json
node_modules/art-template/package.json main
index.js 备选项
进入上一级目录找 node_modules
按照这个规则依次往上找,直到磁盘根目录还找不到,最后报错:Can not find moudle xxx
一个项目有且仅有一个 node_modules 而且是存放到项目的根目录

  1. 包文件信息:
    node.js目前来说对于我最有用的是 dependencies选项,可以用来保存第三方的依赖信息
    如果把模块目录删除了,只需要在cmd执行 npm install 就可以把package.json中dependencies
    中所有的依赖项都下载出来
    最好每个项目都备有 package.json 文件用来生成基本信息文件
    cmd: npm init 来生成package.json
    cmd: npm install --save art-templates jquery

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值