# Node.js学习笔记

浏览器是JavaScript的前端运行环境

nodejs是JavaScript的后端运行环境

# 1.什么是node.js

js是解释性脚本语言,需要解析器和运行环境才能运行,在客户端的解析器是浏览器中的v8解析引擎等等,服务端就是nodejs

总结:nodejs是js的一个解析器,而运行在nodejs中的js脚本的主要作用操作磁盘文件或者搭建http服务器,通过npm安装第三方包,可以实现更多更完善的功能

更直观来说,nodejs是js的一个运行环境,且nodejs是基于Chrome v8引擎的JavaScript运行环境

# 2.运行命令

node js文件名.js

# 3.模块

大型程序一般都是模块化开发,将不同代码拆分到不同的js文件中,每个js文件就是一个模块

# 3.1 require函数

用于在当前模块加载和使用其他模块

//导入内置的http模块
var http = require('http')
// 导入自定义模块
var demo = require('./demo.js')
//导入json数据
var data = require('./data.json')

# 3.2 exports对象

别的模块通过require函数使用当前模块时得到的就是当前模块的module.exports对象,exports对象和前者有相同的指向,但是对外接口以前者为准

当前模块的导出对象,用于导出模块公有方法和属性。

// 导出方法
exports.hello = function(){
    console.log('hello world')
}
//导出属性
exports.name = '小明'

# 3.3 module对象

通过module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。

//将默认导出的普通对象更改为函数,导出时所有的对外接口以module.exports为准
module.exports = function() {
    console.log('hello world');
}

注意:导出的模块只会初始化一次,后面被缓存起来重复使用

# 4.模块的路径解析规则

1.内置模块不做路径解析,直接返回内置模块的导出对象

2.所有的模块都会从node_modules目录为核心进行路径解析

3.可以配置环境变量来制定模块搜索路径

# 5.包package

1.多个子模块组成的大模块称为包,也可以将nodejs编写的程序称为包,所有的第三方模块也叫做包

2.每个包都有一个入口模块main.js和配置文件package.json

3.package.json中的重要属性

​ main:应用程序的入口

​ scripts:可以运行的node脚本

​ dependcies:npm软件包生产依赖

​ devDependencies:npm软件包开发依赖

4.当require方法加载整个文件夹时,会先加载包中package.json配置文件指定的入口模块,没有则加载目录下的index.js模块

# 6.包管理工具NPM

随同nodejs一起安装,可以从NPM服务器下载第三方包或命令行程序到本地

安装module包的npm命令

// 全局包
npm install 包名 -g
nom i 包名 -g

// 项目包
// 生产环境
npm i 包名 -S
// 开发环境
npm i 包名 -D

安装时参考官网以判断该模块作为生产依赖包,还是开发依赖包

# 7.文件系统

node内置模块包括文件系统fs、路径模块path、网络请求http;即nodejs提供的,在js代码编译运行时便已经存在的模块

fs.readFile(pathname, function (err, data) {
    if (err) {
        // Deal with error.
    } else {
        // 处理文件中的数据
    }
});

// pathname若使用相对路径,则会将执行node指令的目录和该路径进行拼接,所以这个参数最好设置为绝对路径

# 8.path模块

用于操作资源路径,可以配合fs系统使用

 // 导入path模块
 const path = require('path')
 
 // 路径拼接,可以解析'../'和'./'
 path.join('/a','/b/c','../','./d');
 
 // 获取当前文件所在目录的绝对路径
 __dirname
 
 // 获取指定资源的文件名
 path.basename(pathStr); //参数为文件资源路径字符串
 // 获取指定资源的文件扩展名
 path.extname(pathStr); //同上

# 8.网络操作

所有的网络操作都建立在http模块的基础上,首先需要使用.createServer方法创建一个服务器,然后调用.listen方法监听端口。之后,每当来了一个客户端请求,创建服务器时传入的回调函数就被调用一次。

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, { 'Content-Type': 'text-plain' });
    response.end('Hello World\n');
}).listen(8124);

创建web服务器的步骤:

1.导入http模块
2.调用http.createServer()
3.调用server.on('request',callback(req,res){})监听客户端请求
4.调用server.listen(端口号,callback)启动服务