作者:Hanson Chan
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
基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用
基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
LTS 为长期稳定版
适合追求稳定性的企业级项目Current 为最新版本
,适合热衷于尝试新特性的用户,但是可能存在隐藏的 Bug 或安全性漏洞node -v
打开终端,在终端输入命令 node –v 后,按下回车键,即可查看已安装的 Node.js 的版本号
node 要执行的js文件的相对路径
再输入 node js文件的相对路径
和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问
防止了全局变量污染的问题
Node.js符合Common.js规范
module
每个.js自定义模块中都有一个 module对象,其存储了和当前模块有关的信息它的 exports 属性(即 module.exports)是对外的接口
module.exports
将模块内的变量和方法共享出去,供外界使用module.exports.变量 = ...
module.exports.方法 = function(){}
module.exports = {变量:变量值,暴露的方法名:方法名}
外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象
exports
Node中每个模块都会把module.exports指向的对象赋值给一个变量exports,exports = module.exports.exports.变量名 = ...
exports.方法名 = function(){}
exports = {变量:变量值,暴露的方法名:方法名}
exports和module.exports指向同一个对象
最终共享的结果以 module.exports 指向的对象为准
require('模块路径')
内置模块
内置模块是由 Node.js 官方提供的,例如 fs、path、http 等自定义模块
用户创建的每个 .js 文件,都是自定义模块第三方模块
由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载fs文件系统模块
Node.js 官方提供的、用来操作文件的模块
const fs = require('fs')
fs.readFile(path[,options],function(err,dataStr))
// 异步方法
const fs = require('fs');
fs.readFile('路径', 'utf8', function(err, dataStr) {
if (err) {
// 读取文件失败
return console.log(err.message);
}
// 读取文件成功
console.log(dataStr);
})
fs.writeFile(path,data[,options],function(err))
const fs = require('fs');
fs.writeFile('路径','写入的内容','utf-8',err => {
if(err) {
// 读取文件失败
return console.log(err.message);
}else {
// 读取文件成功
console.log('文件写入成功');
}
})
参数 | 备注 |
---|---|
path | 文件路径,必选 |
data | 写入的数据 |
options | 编码格式,可选,默认是utf-8 |
err | 通过回调函数拿到读取的结果,必选。 如果读取失败则值是错误对象,成功是null |
dataStr | 通过回调函数拿到读取的结果,必选 如果读取成功则值是undefined,成功是文件内容 |
提供的操作路径是以 ./ 或 ../ 开头的相对路径,容易出现路径动态拼接错误
使用__dirname(表示当前文件所处的目录)拼接字符串
// __dirname 表示当前文件所处的目录
fs.readFile(path.join(__dirname, '相对路径'), 'utf8', function(err, dataStr) {
if (err) {
return console.log('读取文件失败!' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
path 模块
Node.js 官方提供的、用来处理路径的模块
const path = require('path');
path.join('路径片段1','路径片段2'...);
path.basename(路径[,文件扩展名])
path.extname(path)
方法 | 备注 |
---|---|
join | 参数是字符串形式 |
basename | 使用第二个参数就只获取文件名不包括后缀 |
extname | 返回得到的扩展名字符串 |
const path = require('path');
/*******join方法*******/
const pathStr = path.join('/a', '/b/c', '../../', './d', 'e');
console.log(pathStr); // \a\b\d\e
/*******basename方法*******/
// 定义文件的存放路径
const fpath = '/a/b/c/index.html';
const fullName = path.basename(fpath)
console.log(fullName) // index.html
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt); // index
/*******extname方法*******/
const fext = path.extname(fpath)
console.log(fext); // .html
http 模块
Node.js 官方提供的、用来创建 web 服务器的模块
服务器和普通电脑的区别
服务器上安装了 web 服务器软件,例如:IIS、Apache 等const http = require('http')
const server = http.createServer()
server.on('request', function (req, res){})
参数 | 备注 |
---|---|
req | req 是请求对象,包含了与客户端相关的数据和属性 |
res | 发送给客户端的资源对象 |
server.listen(端口号, function () {})
const http = require('http');
const server = http.createServer();
server.on('request', function (req, res) {
// req.url 是客户端请求的 URL 地址
// req.method 是客户端请求的 method 类型
// res.end(内容) 方法,向客户端响应一些内容
// 解决响应内容有中文乱码的问题
res.setHeader('Content-Type', 'text/html; charset=utf-8');
});
server.listen(8080, function () {
...
});
// 1.1 导入 http 模块
const http = require('http')
// 1.2 导入 fs 模块
const fs = require('fs')
// 1.3 导入 path 模块
const path = require('path')
// 2.1 创建 web 服务器
const server = http.createServer()
// 2.2 监听 web 服务器的 request 事件
server.on('request', (req, res) => {
// 3.1 获取到客户端请求的 URL 地址
// /clock/index.html
// /clock/index.css
// /clock/index.js
const url = req.url
// 5.1 预定义一个空白的文件存放路径
let fpath = ''
if (url === '/') {
// 因为html文件内有style和script标签可以在同源的情况下可以加载,所以加载了index.html相当于加载了html、css、js文件
fpath = path.join(__dirname, './clock/index.html');
} else {
// /index.html
// /index.css
// /index.js
fpath = path.join(__dirname, '/clock', url)
}
// 4.1 根据“映射”过来的文件路径读取文件的内容
fs.readFile(fpath, 'utf8', (err, dataStr) => {
// 4.2 读取失败,向客户端响应固定的“错误消息”
if (err) return res.end('404 Not found.')
// 4.3 读取成功,将读取成功的内容,响应给客户端
res.end(dataStr)
})
})
// 2.3 启动服务器
server.listen(80, () => {
console.log('server running at http://127.0.0.1')
})
包是由第三方个人或团队开发出来的
Node.js 的内置模块仅提供了一些底层的 API,而包是基于内置模块封装出来的
提供了更高级、更方便的 API,极大的提高了开发效率
项目包
被安装到项目的 node_modules 目录中的包被记录到 devDependencies 节点中的包
被记录到 dependencies 节点中的包
全局包
执行 npm install -g命令会把包安装为全局包全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录
i5ting_toc
一个可以把 md 文档转为 html 页面的小工具i5ting_toc -f 要转换的md文件相对于终端的路径 -o
优先从缓存中加载
内置模块的加载机制
内置模块的加载优先级最高
即使 node_modules有与内置模块名字相同的包 ,require始终导入内置模块自定义模块的加载机制
必须以 ./ 或 ../ 开头的路径标识符
否则会被当作内置模块或第三方模块进行加载省略扩展名的加载顺序
第三方模块的加载机制
目录作为模块
在被加载的目录下查找一个叫做 package.json 的文件,并寻找 main 属性,作为 require() 加载的入口
如果目录里没有package.json,或main入口不存在或无法解析,则将会试图加载目录下的 index.js 文件
如果以上两步都失败了,则会在终端打印错误消息,报告模块的缺失:Error: Cannot find module 'xxx'
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。