Node.js是一个基于Chrome V8 JavaScript引擎构建的服务器端JavaScript环境,它能够运行JavaScript并且具有在Node.js环境下提供HTTP服务的能力。使用Node.js的http模块,我们可以轻松地创建HTTP服务器和客户端。下面是使用http模块创建服务器和客户端的完整攻略。
创建HTTP服务器
使用Node.js的http模块可以轻松地创建HTTP服务器。下面是基本的HTTP服务器代码:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(3000, () => {
console.log(`Server running at http://localhost:3000/`);
});
上面的代码会监听3000端口,并在用户通过浏览器访问http://localhost:3000/
时返回“Hello World”字符串。
这里的createServer
函数会创建一个新的HTTP服务器,并在每次请求到达服务器时执行回调函数。回调函数接受两个参数req
和res
,代表请求和响应。在回调函数中,我们可以使用res
对象来设置响应头和响应体,并调用end
方法结束响应。
创建HTTP客户端
使用Node.js的http模块也可以轻松地创建HTTP客户端。下面是基本的HTTP客户端代码:
const http = require('http');
const options = {
hostname: 'www.google.com',
port: 80,
path: '/',
method: 'GET'
};
const req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
req.end();
上面的代码会向www.google.com
发送一个HTTP GET请求,并打印出响应的状态码、响应头和响应体。
这里的request
函数会创建一个新的HTTP请求,并接受一个包含请求选项的对象。在请求选项中,我们需要指定请求的方式、目标主机名、端口号、路径等等。request
函数会返回一个http.ClientRequest
对象,我们可以通过监听这个对象的事件来获取响应数据。
示例说明
以上是创建HTTP服务器和客户端的基本代码示例,实际上我们可以根据需要来添加相关的业务逻辑。下面是两个示例说明:
示例一:使用Http模块创建一个简单的RESTful API服务器
const http = require('http');
const server = http.createServer((req, res) => {
const { method, url } = req;
res.setHeader('Content-Type', 'application/json');
if (method === 'GET' && url === '/user') {
res.statusCode = 200;
res.end(JSON.stringify({ name: 'Alice', age: 20 }));
} else if (method === 'POST' && url === '/user') {
let body = '';
req.on('data', (chunk) => {
body += chunk.toString();
});
req.on('end', () => {
res.statusCode = 201;
res.end(`User ${JSON.parse(body).name} created successfully.`);
});
} else {
res.statusCode = 404;
res.end(JSON.stringify({ error: 'Route not found' }));
}
});
server.listen(3000, () => {
console.log(`Server running at http://localhost:3000/`);
});
上面的代码会创建一个简单的RESTful API服务器,在/user
路径下支持GET和POST请求。GET请求会返回一个预设的用户信息JSON,POST请求则是接收一个JSON格式的用户信息,并返回创建成功的提示语。如果请求的路径不存在,则返回404错误。可以通过curl命令或Postman等工具进行测试。
示例二:使用Http模块创建一个简单的Websocket服务器
const http = require('http');
const WebSocket = require('ws');
const server = http.createServer();
const wss = new WebSocket.Server({ server });
wss.on('connection', (socket) => {
console.log('Websocket connected.');
socket.on('message', (message) => {
console.log(`Received message: ${message}`);
socket.send(`Server receives message: ${message}`);
});
socket.on('close', () => {
console.log('Websocket closed.');
});
});
server.listen(3000, () => {
console.log(`Websocket server running at http://localhost:3000/`);
});
上面的代码会创建一个简单的Websocket服务器,监听在3000端口。在客户端与Websocket服务器建立连接之后,服务器会发送一条连接成功的提示,并接收到客户端发来的消息,并将消息原封不动地返回给客户端。可以通过浏览器自带的Websocket工具或者socket.io等工具测试。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js使用http模块创建服务器和客户端完整示例 - Python技术站