一、创建一个Node.js应用
- 加载http核心模块
| 1 | var http = require("http") | 
- 创建一个Web服务器,返回一个server实例
| 1 | var server = http.createServer() | 
- 服务端接收到来自客户端的请求时”request”执行回调函数- 参数:- request 请求对象(客户端向本服务端发送的请求对象)
- response 响应对象(本服务端向客户端发送的响应对象)
 
 
- 参数:
| 1 | server.on("request",function(request,response){ | 
- 绑定端口号,开启服务器
| 1 | server.listen(80,function(){ | 
二、Node.js常用核心模块
除了我们刚刚用的http模块,Node.js中还有一些比较常用的模块
1. fs模块
1.1 加载文件系统模块
| 1 | var fs=require('fs')//加载fs核心模块 | 
1.2 文件读操作
- 参数- 读文件的文件名
- 回调函数- err : 出错信息,读文件出错时返回错误对象。否则返回Null。
- data : 读出的数据,默认为二进制数据。
 
 
| 1 | fs.readFile('readme.txt',function(err,data){ | 
1.3 文件写操作
- 参数- 将数据写入的目标文件
- 要写入的数据
- 回调函数- err
 
 
| 1 | fs.writeFile('output.txt','i am data',function(err){ | 
2. Path模块
这是Node.js提供的路径模块。主要是为了解析路径
- path.basename(path[,ext])获得当前path中的最终文件名(带后缀),如参数加入ext,则获得不带路径的结果
- path.dirname(path)获得path中的路径解析结果
- path.extname(path)获得path中最终文件的后缀
- path.join([...paths])将paths合并为一个路径
- path.parse(path)将path解析为一个路径信息对象比如
| 1 | path.parse('/home/user/dir/file.txt'); | 
三、Node.js中的其他成员
再Node.js中的每个模块除了都有require、exports等模块相关的API外,还有两个特殊的成员:
- __dirname可以用来获得当前文件模块的绝对路径
- __filename可以用来获取当前文件的绝对路径
三、Node.js面向模块编程思想
1.万物基于模块
在Node.js中每个Js文件都是一个模块,都可以被其他的模块用require('路径+文件名') 的方式引用。模块分为Node.js自带的系统模块和第三方模块,以及用户自定义的模块
2.模块的接口
模块的接口利用每个模块本身所提供的module.exports 或exports对象即可,关于它们之间的区别会在后面说明自己的看法。
3.引用自定义模块举例
- 引用系统模块
| 1 | let http = require('http') | 
- 引用第三方模块 - 在终端或控制台中输入 - npm install 包名命令 的方式来安装第三方模块到当前目录的node_mudoles文件夹中
- 像引用系统模块那样引用第三方模块即可,例如 - 1 
 2
 3- npm install art-template 
 let temp = require('art-template')
 
- 引用用户自定义模块 - 文件a - 1 
 2- let a = require('./b.js') 
 console.log(a.add(3,10)) //30
- 文件b - 1 
 2
 3- exports.add = (x,y)=>a+b 
 //或
 mudole.exports.add = (x,y)=>a+b
- 关于 - exports与- mudoles.exports之间的关系- 首先,每个模块都有一个 - module对象,他可能是这样的:- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- Module { 
 id: '.',
 exports: { test: 5, add: [Function], readFile: [Function] },
 parent: null,
 filename: 'D:\\Fontend\\Node.js学习\\简单的模块化\\c.js',
 loaded: false,
 children: [],
 paths:
 [ 'D:\\Fontend\\Node.js学习\\简单的模块化\\node_modules',
 'D:\\Fontend\\Node.js学习\\node_modules',
 'D:\\Fontend\\node_modules',
 'D:\\node_modules' ] }- 它包括的一些关于模块本身的信息,其中就包含有 - exports。所以,- exports与- module.exports在默认情况下是等价的。为了便于挂载接口,所以每个模块可以直接用- exports,但是实际上模块向引用它的上层返回的是- module.exports这个对象
 
4.关于Node.js对于模块的查找
实际上在运行过程中,如果要加载第三方模块,系统默认会先在当前文件目录下的node_module文件夹下按名寻找对应的第三方模块。如果没有,则在向上一层目录下的node_module文件夹下按名寻找,依此类推,直到计算机盘符下的根目录下的node_module文件夹。
四、总结
在有一定JavaScript语言的基础上学习原生Node.js相对容易,但是对于很多操作来说,过程还是过于繁琐,所以,接下来将在此基础上学习更加简洁高效的Express框架。
个有趣的问题是,为什么 Node 约定,回调函数的第一个参数,必须是错误对象err(如果没有错误,该参数就是null)?
原因是执行分成两段,第一段执行完以后,任务所在的上下文环境就已经结束了。在这以后抛出的错误,原来的上下文环境已经无法捕捉,只能当作参数,传入第二段。