Nodejs 基础内容
wyx 7/4/2022 node
# 1. web服务器开发
# 1.1 ip地址和端口号
- ip地址用来定位计算机
- 端口号用来定位具体的应用程序
- 一切需要联网通信的软件都会占用一 个端口号
- 端口号的范围从0-65536之间
- 在计算机中有一些默认端口号,最好不要去使用
- 例如http服务的80
- 我们在开发过程中使用一些简单好记的就可以了,例如3000. 5000等没什么含义
- 可以同时开启多个服务,但一定要确保不同的服务占用不同的端口号不一致才可以
- 说白了,在一台计算机,同一个端口号同一时间只能被同一个程序占用
# 2. 代码风格
javascript standard style (opens new window)
Airbnb Javascript Style
无分号:(、[、``这些最好前面补分号,避免一些问题
书籍参考:《编写可维护的javascript》
# 3. return的两个作用
- 方法返回值
- 阻止代码继续往后执行
# 4 .art-template模板引擎
# 4.1 下载
- npm install art-template
该命令在哪执行就会把包下载到哪里。默认下载到node_modules目录下面。
# 4.2 浏览器端使用
- 在浏览器下面引用lib/template-web.js文件
<script src="node_modules/art-template/ 1ib/template-web.js"></script> <script type="text/template" id="tpl"> hello {{ name }} </script>
1
2
3
4
# 4.3 node服务器端使用
在需要使用的文件模块中加载 art-template
require('art-template')
1
查文档,使用模板引擎的API
var 渲染结果 = template.render(模板字符串,{解析替换对象}); response.end(渲染结果);
1
2
# 4.4 服务器端渲染和客户端渲染的区别
- 客户端渲染不利于SEO搜索引擎优化
- 服务器端渲染是可以被爬虫抓取到的,客户端渲染很难被爬虫抓取到
- 所以你会发现真正的网站既不是纯异步,也不是纯服务器端渲染出来的,而是两者结合来做的
# 5. REPL
- read
- eval
- loop
在终端直接输入node
命令
# 6. 模块系统
- EcmaScript语言
- 和浏览器不一样,在node中没有DOM,BOM
- 核心模块
- 文件操作fs
- http服务http
- url路径操作模块
- path路径处理模块
- os操作系统信息
- 第三方模块
- art-template
- 通过npm下载使用
- 自己写的模块
- 自己创建的文件
# 6.1 什么是模块化
- 具有文件作用域
- 具有通讯规则
- 加载 require
- 导出 exports接口对象来导出模块中的成员
# 6.1.1 加载require
语法
var 自定义模块 = require('模块')
1
两个作用:
- 执行被加载模块中的代码
- 得到被加载模块中使用exports导出接口对象
# 6.1.2 导出export
- node中是模块作用域,默认文件中所有的成员只在当前模块中有效
- 对于希望可以被其他模块访问的成员,我们就需要把这些成员都挂载到
exports
接口中就可以了
导出多个成员(必须在对象当中)
exports a = 'hello';
exports b = 123;
exports c = function(){
console.log('ccc');
}
exports d = {
doo:'doo'
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
导出单个成员(拿到的就是函数,字符串)
下面会覆盖上面
module.exports = 'hello';
module.exports = function(x,y){
return x+y;
}
1
2
3
4
2
3
4
也可以这样导出多个成员
module.exports = {
add : function(x,y){
return x+y;
},
str : 'hello'
}
1
2
3
4
5
6
2
3
4
5
6
# 6.1.3 原理解析 exports与module.exports
exports是module.exports
的一个引用,exports指向的是module.exports
console.log(exports === module.exports) //true
exprots.foo = 'foo';
//等价于
module.exports.foo = 'foo';
1
2
3
4
5
2
3
4
5
exports与module.exports区别
使用方法
exports
exports.[function name] = [function name]
module.exports
moudle.exports= [function name]
exports 返回的是模块函数
module.exports 返回的是模块对象本身,返回的是一个类
exports的方法可以直接调用 module.exports需要new对象之后才可以调用
# 6.2 CommonJs模块规范
CommonJS
定义的模块分为: 模块标识(module
)、模块定义(exports
) 、模块引用(require
)
# 6.3 require
# 6.3.1 加载优先从缓存加载
- 好处:避免重复加载,提高模块加载效率
# 6.3.2 判断模块标识,标识符分析
- 核心模块
- 本质也是文件
- 但是已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了
- 第三方模块
- npm下载
- require("包名")加载使用
- node_modules ---> 目标包名 ---> package.json ---> main属性 --->main指向的入口文件
- 如果package.json不存在或者main指定的入口文件不存在,则自动寻找index.js文件
- 如果所有以上任何条件都不成立,就会进入上一级目录中的node_modules目录中查找,如果上一级还没有就会往上上一级查找,知道查到根目录还没有的话,就会报错,can not find module xxx
- 自己写的模块