node.js

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

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

② Node.js 是 JavaScript 的后端运行环境。

③ Node.js 中无法调用 DOM 和 BOM 等

浏览器内置 API。

Node.js 可以做什么

Node.js 作为一个 JavaScript 的运行环境,仅仅提供了基础的功能和 API。然而,基于 Node.js 提供的这些基础能,很多强大

的工具和框架如雨后春笋,层出不穷,所以学会了 Node.js ,可以让前端程序员胜任更多的工作和岗位:

① 基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用

② 基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用

③ 基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目

④ 读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…

总之:Node.js 是大前端时代的“大宝剑”,有了 Node.js 这个超级 buff 的加持,前端程序员的行业竞争力会越来越强!

浏览器中的 JavaScript 学习路径:

JavaScript 基础语法 + 浏览器内置 API(DOM + BOM) + 第三方库(jQuery、art-template 等)

Node.js 的学习路径:

JavaScript 基础语法 + Node.js 内置 API 模块(fs、path、http等)+ 第三方 API 模块(express、mysql 等)

fs 文件系统模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

例如:

⚫ fs.readFile() 方法,用来读取指定文件中的内容

⚫ fs.writeFile() 方法,用来向指定的文件中写入内容

如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:

1
const fs=require('fs')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 1. 导入 fs 模块,来操作文件
const fs = require('fs')

// 2. 调用 fs.readFile() 方法读取文件
// 参数1:读取文件的存放路径
// 参数2:读取文件时候采用的编码格式,一般默认指定 utf8
// 参数3:回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
// 2.1 打印失败的结果
// 如果读取成功,则 err 的值为 null
// 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined
console.log(err)
console.log('-------')
// 2.2 打印成功的结果
console.log(dataStr)
})

http模块

  • http模块是Node.js 官方提供的、用来创建 web服务器的模块。通过 http模块提供的 http.createServer()方法,就能方便的把一台普通的电脑,变成一台Web服务器,从而对外提供Web资源服务。

  • 服务器和普通电脑的区别在于,服务器上安装了web服务器软件,例如:IIS、Apache等。通过安装这些服务器软件,就能把一台普通的电脑变成一台web服务器。

  • 在Node.js 中,我们不需要使用IIS、Apache等这些第三方web服务器软件。因为我们可以基于Node,js提供的http模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供web服务。

  • 基本四步

    1. 导入http模块
    2. 创建web服务器实例
    3. 为服务器实例绑定request事件,监听客户端请求
    4. 启动服务器

导入模块

1
2
ini
复制代码const http = require('http')

创建web服务器实例

1
2
ini
复制代码const server = http.createServer()

为服务器绑定request事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
javascript复制代码server.on('request', (req, res) => {
console.log('Someone visit our web server.')
const url = req.url // 请求地址
const method = req.method // 请求url

// 根据路径判断返回不同内容
let content = '<h1>404 Not found!</h1>'
if(url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
}

res.setHeader('Content-Type', 'text/html; charset=utf-8') // 设置响应头
res.end(content) // 向客户端响应内容
})

启动服务器

1
2
3
javascript复制代码server.listen(80, () => {
console.log('http server running at http://127.0.0.1')
})

模块化

npm与包

  • 概念
    • Node.js 中的第三方模块又叫做包。
    • 就像电脑和计算机指的是相同的东西,第三方模块和包指的是同一个概念,只不过叫法不同。
  • 来源
    • 不同于Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。
    • Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用。
  • 为什么需要包
    • 由于Node.js 的内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发的时,效率很低。
    • 包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率。
    • 包和内置模块之间的关系,类似于jQuery和浏览器内置API之间的关系。
  • 从哪里下载包
    • 国外有一家IT公司,叫做npm, Inc.这家公司旗下有一个非常著名的网站: www.npmjs.com/,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包,只要你有足够的耐心!
    • npm, Inc.公司提供了一个地址为registry.npmjs.org/的服务器,来对外共享所有的包,我们可以从这个服务器上下载自己所需要的包。
  • 如何下载包
    • npm, Inc.公司提供了一个包管理工具,我们可以使用这个包管理工具,从registry.npmjs.org/服务器把需要的包下载到本地使用。 这个包管理工具的名字叫做Node Package Manager (简称npm包管理工具),这个包管理工具随着Node.js的安装包一起被安装到了用户的电脑上。

npm

  • npm是Nodejs官方的包管理工具。
  • 初次装包完成后,在项目文件夹下多一个叫做node_ modules的文件夹和package-lockjson的配置文件。
  • node_modules 文件夹用来存放所有已安装到项目中的包。require()导入第三方包时,就是从这个目录中查找并加载包。
  • package-lockjson 配置文件用来记录node modules目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
csharp复制代码# 初始化npm配置文件
# -y表示使用配置默认选项
# 执行后出现 package.json 文件
npm init -y

# 下载包
npm install <包名称>
# 删除包
npm uninstall <包名称>
# 切换镜像源加速下载
npm config set registry=https://registry.npm.taobao.org/

# 在执行npm install命令时,如果提供了-g参数,则会把包安装为全局包。
# 全局包会被安装到C:\Users\用户目录VAppData\RoamingInpm\node_modules目录下。
npm install <包名称> -g
  • 上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。
  • 运行npm install命令安装包的时候,npm包管理工具会自动把包的名称和版本号,记录到package.json 中。
1
2
3
4
5
6
7
8
9
10
11
12
13
javascript复制代码// packge.json
{
"name": "nodeNpm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

发布包

  • 新建itheima-tools文件夹,作为包的根目录
  • 在itheima-tools文件夹中,新建如下三个文件:
    • package.json(包管理配置文件)
    • index.js(包的入口文件)
    • README.md(包的说明文档)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
javascript复制代码// packge.json
{
"name": "myTool", // 包名称
"version": "1.0.0", // 包版本
"description": "", // 包的描述
"main": "index.js", // 包的入口文件
"scripts": { // 包的可执行指令
"test": "echo "Error: no test specified" && exit 1"
},
"keywords": [], // 搜索关键字,使用那些关键字可以搜索到该作者
"author": "", // 包的作者
"license": "ISC" // 包遵循的开源协议
}
css复制代码// main.js

module.export = {
add(a, b){
return a+b
}
}
  • 包根目录中的README.md文件,是包的使用说明文档。通过它,我们可以事先把包的使用说明,以 markdown的格式写出来,方便用户参考。
  • README文件中具体写什么内容,没有强制性的要求;只要能够清晰地把包的作用、用法、注意事项等描述清楚即可。我们所创建的
  • 这个包的 README.md文档中,会包含以下6项内容:
    • 安装方式、导入方式、格式化时间、转义HTML中的特殊字符、还原HTML中的特殊字符、开源协议

npm发布

注册npm账号

  • 访问www.npmjs.com/网站,点击 sign up按钮,进入注册用户界面
  • 填写账号相关的信息:Full Name、Public Email、Username、Password
  • 点击Create an Account按钮,注册账号
  • 登录邮箱,点击验证链接,进行账号的验证

登录npm账号

  • npm账号注册完成后,可以在终端中执行npm login命令,依次输入用户名、密码、邮箱后,即可登录成功。
  • 注意:在运行npm login命令之前,必须先把下包的服务器地址切换为npm的官方服务器。否则会导致发布包失败!
1
2
bash复制代码# 输入账号密码后即可成功登录
npm login

发布

1
2
3
4
5
bash复制代码# 将包发布在npm上
npm publish

# 删除发布的包
npm unpublish <包名> --force
  • npm unpublish命令只能删除72小时以内发布的包。
  • npm unpublish 删除的包,在24小时内不允许重复发布发布包的时候要慎重。
  • 尽量不要往npm上发布没有意义的包!

express的使用

这里是express中文使用说明书
在使用学习时可以参考一下。