Nodejs 基础内容

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的两个作用

  1. 方法返回值
  2. 阻止代码继续往后执行

# 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
  • print
  • 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

导出单个成员(拿到的就是函数,字符串)

下面会覆盖上面

module.exports = 'hello';
module.exports = function(x,y){
    return x+y;
}
1
2
3
4

也可以这样导出多个成员

module.exports = {
    add : function(x,y){
    	return x+y;
	},
    str : 'hello'
}
1
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

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
  • 自己写的模块

# 6.4 npm

Last Updated: 4/18/2023, 2:49:49 PM
晴天
周杰伦