-
软件版本号是什么: 它涉及到软件工程学理论,一般为0.0.0 格式
第一个表示有重大改变,第二个增加功能吗,第三个修改小bug -
模板引擎里面的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
}
- 复习 :
- 客户端渲染和服务端渲染的区别
- 最少两次请求,发起 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 eg: 新浪微博输入地址.com 它再第一次请求时会加载到.com.cn,并且把它记录缓存下拉
下次直接请求网址的时候就从缓存里直接访问,减少资源占用,耗费性能。 -
Node 中的 Console(REPL)使用
可以高亮显示
- 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 …/
模块 直接模块名字
不要用绝对路径
-
count为常量,不可变,不可修改
-
require的加载规则,也就是模块是如何加载进来使用的
他就像原型链和css中子元素继承父级元素的属性的规则一样,一步一步往上爬,往上找 -
如果是非路径形式的模块标识
路径形式的模块:
./ 当前目录,不可省略
…/ 上一级目录,不可省略
/xxx 几乎不用
d:/a/foo.js 几乎不用
首位的 / 在这里表示的是当前文件模块所属磁盘根路径
.js 后缀名可以省略
require(’./foo.js’) -
核心模块的本质也是文件
核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了
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 而且是存放到项目的根目录
- 包文件信息:
node.js目前来说对于我最有用的是 dependencies选项,可以用来保存第三方的依赖信息
如果把模块目录删除了,只需要在cmd执行 npm install 就可以把package.json中dependencies
中所有的依赖项都下载出来
最好每个项目都备有 package.json 文件用来生成基本信息文件
cmd: npm init 来生成package.json
cmd: npm install --save art-templates jquery
在这里插入图片描述