一、环境搭建
首先,我们需要在本地搭建Node服务器运行环境。安装Node.js的方法因系统而异,以Windows为例,我们可以在官网https://nodejs.org/en/下载安装包,或者使用npm安装:
npm install node
安装完成后,我们可以在命令行中输入以下命令检查是否安装成功:
node -v
若能输出Node.js的版本号,则说明安装成功。
二、创建服务器
接下来,我们尝试创建一个简单的Node服务器。在本地创建一个名为app.js的文件,输入以下代码:
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World!');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
代码解析:
- 第一行引入Node.js的HTTP模块。
- 第三行创建一个HTTP服务器,回调函数接收请求和返回响应。
- 第四行设置HTTP状态码为200。
- 第五行设置响应头的Content-Type为text/plain。
- 第六行结束并返回响应内容"Hello World!"。
- 第八行启动服务器,监听3000端口,并输出运行信息。
接下来,在命令行中运行app.js文件:
node app.js
控制台输出"Server running at http://localhost:3000/",说明服务器成功启动。
三、处理请求
我们可以通过request对象获取请求相关的信息,例如URL、HTTP方法等。修改app.js文件代码如下:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World!');
} else if (req.url === '/about') {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('This is about page');
} else {
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('404 Not Found');
}
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
代码解析:
- 第四行根据请求的URL进行不同的处理。
- 第五到七行返回"Hello World!"。
- 第八到十行返回"This is about page"。
- 第十一到十三行返回"404 Not Found"。
重新启动服务器,访问http://localhost:3000/和http://localhost:3000/about,分别返回预期的响应内容。
四、处理POST请求
在上一节中,我们处理了GET请求。HTTP协议还定义了其他请求方法,其中最常用的POST请求,常用于提交表单数据等操作。处理POST请求需要使用Node.js的querystring模块解析请求体。修改app.js文件代码如下:
const http = require('http');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const postData = querystring.parse(body);
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end(`Hello ${postData.name}!`);
});
} else {
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain');
res.end('404 Not Found');
}
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
代码解析:
- 第二行引入Node.js的querystring模块,用于解析请求体。
- 第四行判断请求方法是否为POST。
- 第五至七行监听请求体的每个数据块,并将它们拼接起来。
- 第八至十一行解析请求体,并返回"Hello xxx!"。
接下来,我们使用curl模拟POST请求:
curl -X POST -d "name=John" http://localhost:3000
控制台输出"Hello John!",说明POST请求被正常处理。
五、使用Express框架
手写HTTP服务器可以让我们更深入地理解底层原理,但是对于实际开发而言,使用框架可以大大提高开发效率。Express是Node.js最常用的Web框架之一,可以快速创建RESTful API和Web应用。以下是一个使用Express创建简单HTTP服务器的示例:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.get('/about', (req, res) => {
res.send('This is about page');
});
app.post('/', (req, res) => {
const name = req.body.name;
res.send(`Hello ${name}!`);
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
代码解析:
- 第一行引入Express模块。
- 第二、三行创建Express应用实例和端口。
- 第五、九行使用app.get方法处理GET请求。
- 第十一、十四行使用app.post方法处理POST请求。
- 第十六行启动服务器并输出运行信息。
使用Express框架,我们可以通过更简洁的代码实现相同的功能。在控制台输入命令运行该文件,即可启动服务器。
六、结尾
本文讲解了从环境搭建到服务器创建与请求处理,再到使用Express框架创建HTTP服务器的全过程。Node.js的高效、轻量级和易于扩展使其成为现代Web应用开发的必备工具。希望本文能够对你了解和使用Node服务器有所帮助。