NodeJS的特点
1、是一个JavaScript的运行环境
2、依赖于Chrome V8引擎进行代码解释
3、事件驱动,在Node中,客户端请求建立连接,提交数据等行为,会触发相应的事件
4、非阻塞I/O,即异步输入输出,提高程序的执行效率
5、轻量级应用,适用于实时数据交互
6、单线程,减少内存开销,无需在意线程同步的问题,但是一个错误可能会引起整个程序的退出
NodeJS的适用场景
NodeJS擅长处理I/O,不善于计算
因此适用于需要处理大量并发的I/O,但内部无需进行复杂的逻辑处理的应用程序,如聊天室,博客系统等
NodeJS REPL
Read Eval Print Loop
:交互式解释器,表示一个运行的环境,如cmd
、shell
、IDLE
等
启动node
终端:先查看电脑中是否安装node: node -v
,若以安装,执行node
命令即可启动node终端
在node
终端中执行JavaScript
代码:
Chrome
浏览器的Console
控制台中执行JS代码一样,直接输入就行。如:console.log('hello world')
使用node
执行JS文件:退出node终端
,ctrl + d
;执行node xxx.js
即可
NodeJS全局对象
JavaScript
的全局对象是window
NodeJS
的全局对象是global
,所有的全局变量
都是global的属性
,可以直接访问
常用全局函数:setTimeout()
、clearTimeout()
、setInterval()
、clearInterval()
、console.log()
console.log(__filename) //输出当前js文件的全路径,包括文件名console.log(__dirname) //输出当前js文件的所在的目录,不包括文件名
使用NodeJS创建一个应用
1、引入http模块,使用require指令来引入Node.js模块
2、创建服务器:服务器可以监听客户端的请求
3、接收请求和响应请求
var http = require('http') //加载http模块http.createServer(function (request, response) { //发送HTTP头部:HTTP状态值,200:OK;内容类型:text/plain response.writeHead(200, { 'Content-Type': 'text/plain' }) //发送响应数据'hello world' response.end('hello world\n')}).listen(8080) //监听8080端口,在浏览器中输入localhost:8080即可访问console.log('Server running at http://127.0.0.1:8080/')
在cmd
或GitBash
中执行node server.js
即可启动web服务,在浏览器中输入请求,可进行访问和调试
NodeJS包
包用于管理多个模块及其依赖关系,包的更目录必须包含package.json
文件
此文件是用来描述包的文件,可以在根目录下通过npm init --yes
快速生成
包操作:安装,npm install express
;删除,npm uninstall express
;更新,npm update express
模块:导入,require()
;导出exports =
,单个导出module.exports =
,通常使用前者,写起来更简洁
NodeJS异步编程
//阻塞/同步var fs = require('fs')var data = fs.readFileSync('./hello.txt')console.log(data.toString())console.log('程序执行完毕') //hello world 程序执行完毕//非阻塞/异步var fs = require('fs')var data = fs.readFile('hello.txt', (err, data) => { if (err) return console.error(err) console.log(data.toString())})console.log('程序执行完毕') //程序执行完毕 hello world