Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用高效、轻量级的非阻塞输入/输出模型,使其成为构建高并发、可扩展性好的网络应用程序的理想平台。Node.js 既适用于服务器端应用程序开发,也适用于命令行工具的开发。
Node.js 的模块化风格也很值得一提。在 Node.js 中,每个功能都被组织为一个可以被其他模块引用的模块。Node.js 还提供了一个代码包管理器 npm,包管理器可以方便地下载安装各种发布到 npm 仓库的实用工具和框架。
Node.js 的应用场景非常广泛,包括但不限于:
Node.js 最大的特点是它的异步、非阻塞 I/O 模型。JavaScript 语言的事件驱动特性加上 V8 引擎强大的处理能力,使得 Node.js 能够很好地处理 I/O 密集型、高并发的应用。Node.js 可以利用单线程的模型来处理大量请求,大幅度提高应用程序的运行效率。
Node.js 的另一个亮点是包管理器 npm。npm 仓库中的包数量庞大,各种实用工具和框架应有尽有。使用 npm 可以很方便地安装和管理这些工具和框架。
在使用 Node.js 进行 Web 服务器开发时,Express.js 是一个非常经典的框架。 Express.js 是基于 Node.js 平台的开发 Web 应用程序的框架。它提供了一组强大的功能,如路由、模板引擎以及中间件等。另外,Express.js 的简洁易用也是它受欢迎的原因之一。
下面是一个简单的示例,展示如何使用 Express.js 编写一个简单的 Web 服务器:
const express = require('express')
const app = express()
app.get('/', function (req, res) {
res.send('Hello World!')
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
在这个示例中,我们引入了 Express.js 模块,并且创建了一个 app 对象来处理路由和中间件。通过 app.get() 方法指定 HTTP GET 请求时的处理函数。
运行这个程序后,我们可以在浏览器中访问 http://localhost:3000/,便可以看到网页输出的“Hello World!”。
另一个经典示例是使用 Socket.io 实现实时聊天室。Socket.io 是一个实现了 WebSocket 协议的库,它使得在客户端和服务器之间建立双向实时通信变得非常简单。下面是一个基本的实时聊天室的服务器端示例:
const app = require('http').createServer(handler)
const io = require('socket.io')(app)
const fs = require('fs')
// HTTP 服务器的处理函数
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500)
return res.end('Error loading index.html')
}
res.writeHead(200)
res.end(data)
})
}
// Socket.io 事件监听
io.on('connection', function (socket) {
console.log('a user connected')
// 接收客户端发来的 'chat message' 事件
socket.on('chat message', function (msg) {
console.log('message: ' + msg)
// 将消息广播给所有连接的客户端
io.emit('chat message', msg)
})
socket.on('disconnect', function () {
console.log('user disconnected')
})
})
app.listen(3000, function () {
console.log('App listening on port 3000!')
})
在这个示例中,我们使用 Node.js 的 http 模块创建了一个 HTTP 服务器,并且使用 Socket.io 在服务器和客户端之间建立了实时通信。通过监听 'chat message' 事件来实现实时聊天的功能。
运行这个程序后,我们可以在浏览器中访问 http://localhost:3000/,便可以进入实时聊天室。