NodeJS是什么
Node.js是一个基于Chrome V8引擎的JavaScript运行时。
NodeJS并不是一门语言,JavaScript才是一门语言,他是一个运行时,如果想要在服务器端运行就需要运行时。
nodeJS使用了一个事件驱动、非阻塞式I/O的模型
非阻塞式I/O
I/O:就是input,output,计算机输入输出的意思。键盘,打印机这些都是输入输出设备。对计算机来说就是读写磁盘或者进行网络操作,数据库操作都是I/O操作。
阻塞式I/O:I/O时进程休眠等待I/O完成后进行下一步。
非阻塞式I/O:I/O时函数立即返回,进程不等待I/O完成就执行下一步,I/O完成后通知主程序。
事件驱动(发布订阅模式)
I/O等异步操作结束后的通知
运行node
方式1:
命令行执行node
进入了node的运行环境
退出执行 .exit ( 或者ctrl+c )
方式2:推荐使用在跟入口文件的同一层目录下执行
node 文件路径
环境
Commonjs规范
一种模块化规范
模块化:每个文件是一个模块,有自己的作用域
在模块内部module变量代表模块本身
module.exports属性代表模块对外接口
require规则
/表示绝对路径
./表示相对于当前文件的
以 ' / ' 或 ' ./ ' 认为是按照当前给的路径查找模块。
不写路径则认为是build-in模块或者各级node-modules内的第三方模块
支持js、json、node 扩展名,不写,先尝试没有后缀的文件,再依次尝试
如果引入的是文件夹,那么会读取该文件夹下的Index文件
require特性
module被加载的时候执行,加载后缓存
一旦出现某个模块被循环加载,就只加载已经执行的部分,还未执行的部分不会输出。
注意:使用模块时,建议引入都写在文件的开头部分,输出都写在文件末尾
调试
浏览器调试
node --inspect-brk main.js
chrome://inspect/#devices
API
global全局对象
commonjs方法:require() module.exports
Buffer processs timer console.log
path
path模块提供用于处理文件路径和目录路径的实用工具
path.normalize
规范化给定的path
path.join([...path])
使用平台特定的分隔符作为定界符将所有给定的path片段连接在一起,然后规范化生成的路径。
path.resolve([...paths])
将路径或路径片段的序列解析为绝对路径。
path.basename(path[,ext])
返回path的最后一部分,尾部的目录分隔符将被忽略
path.dirname(path)
返回path的目录名
path.extname(path)
返回path的扩展名
path.parse(path)
dir root base name ext
path.format(pathObject)
从对象返回路径字符串。 与 path.parse() 相反。
__dirname 是执行代码的文件所在系统的绝对目录
__filename 是执行代码的文件所在系统的绝对文件路径
注意:
__ dirname、__filename 返回执行文件所在系统的绝对路径
process.cwd()总是返回执行node命令所在文件夹
在require方法中指相对当前文件所在文件夹
在其他地方和process.cwd()一样,相对node执行所在文件夹
fs文件系统
fs.readFile()
fs.writeFile()
fs.appendFile()
fs.stat()
fs.mkdir()
fs.readdir()
fs.rename()
fs.rmdir()
fs.unlink()
util
util.promisify()
url
url.format()
url.parse()
querystring
querystring.escape()
querystring.unescape()
querystring.parse()
querystring.stringify()
http(作为客户端)
http.get(options[, callback])
http.request(options[, callback])
http(作为服务器)
http.createServer(options)
response.statusCode
response.statusMessage
response.setHeader(name, value)
response.writeHead(statusCode[, statusMessage] [, headers])
response.write(chunk[, encoding] [, callback])
response.end([data[, encoding]] [, callback])
buffer
用于读取或操作二进制数据流的机制,实例类似整数数组,大小固定
Buffer.alloc()
Buffer.from()
Buffer.isBuffer()
Buffer.concat()
buf.length
buf.toString()
buf.fill()
buf.equals()
buf.indexOf()
buf.copy()
Stream
fs.createReadStream()
fs.createWriteStream()
events
大多数 Node.js 核心 API 构建于惯用的异步事件驱动架构,其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。
emitter.addListener(eventName, listener)
emitter.emit(eventName[, ...args])
emitter.off(eventName, listener)
emitter.on(eventName, listener)
emitter.once(eventName, listener)
emitter.removeAllListeners([eventName])
emitter.removeListener(eventName, listener)
Like
Like
Love
Haha
Wow
Sad
Angry