Node.js是一个开源并且跨平台的JavaScript运行环境。现在几乎所有的前端项目都用到了它,比如你项目中的webpack,各种CLI工具(Vue-CLI、create-react-app)都是基于Node.js开发的。
Node.js运行在Google的V8 JavaScript引擎之上,V8引擎是独立于浏览器。你只需知道V8引擎的性能是非常高效的。
一个Node.js应用运行在单一进程中,它不会为每个请求都新开一个线程,这点是和Java和PHP等语言的本质区别。Node.js在标准库中提供了一系列的异步I/O API,防止JavaScript代码阻塞,虽然标准库同样也提供同步的API,但使用同步方法并不是常态。
当Node.js执行I/O操作时,比如发起网络请求、操作数据库或者文件系统,Node.js并不会阻塞线程等待结果返回,而是会在响应返回时恢复操作。
这就使得Node.js可以在单个服务器上处理上千个并发请求,完全不用我们自己去管理线程。
Node.js还有一个独特的优势,因为所有的前端开发工程师以前使用JavaScript开发客户端应用,现在还可以通过JavaScript基于Node.js来开发服务端应用,而完全不用学习新的语言。
而且在Node.js中,我们可以尽情的去使用新的ECMAScript的标准,我们不必去等待客户更新他们的浏览器,我们只要更改我们的Node.js版本来决定我们使用哪个版本的ECMAScript标准。
npm以其简单的结构帮助Node.js的生态蓬勃发展,现在npm的依赖包已经超过100,0000个,并且免费使用。
相比其他的语言的依赖管理工具来说,npm无疑是相当成功的。
Node.js最常见的Hello World
例子就是做一个Web服务器:
const http = require('http') const hostname = 'localhost' const port = 3000 const server = http.createServer((req, res) => { res.statusCode = 200 res.setHeader('Content-Type', 'text/plain') res.end('Hello World\n') }) server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}`) })
运行示例:
$ node server.js Server running at http://localhost:3000
在浏览器访问:
首先我们引入Node.js的 http
模块。
Node.js有很棒的标准库,包含了一流的关于网络操作的库。
使用http
模块的createServer()
方法来创建一个新的HTTP服务并且返回它。
之后使用listen()
方法来设置监听端口和主机名。当服务器准备好之后,回调函数被调用。
每当收到新的请求时,就会调用 request
事件 ,提供两个对象,一个request对象(http.IncomingMessage
),一个response(http.ServerResponse
)对象。
这两个对象对于处理HTTP调用至关重要。
第一个提供请求的一些详细信息,在这个简单的示例中并没有使用它,但你可以使用它的请求头信息和请求数据。
第二个用于将数据返回给调用者。
在此示例中:
res.statusCode = 200
我们将statusCode
属性设置为200,表示响应成功。
设置Content-Type
Header头信息
res.setHeader('Content-Type', 'text/plain')
然后我们关闭响应,将内容作为参数传递给end()
函数。
res.end('Hello World\n')
我们通过Chrome devtool工具的network
来查看,我们上面设置的statusCode
,Content-Type
。
Response
响应内容:
欢迎我的公众号【小帅的编程笔记】,让自己和他人都能有所收获!