📅  最后修改于: 2023-12-03 15:17:54.647000             🧑  作者: Mango
Node.js是一种用于服务器端编程的JavaScript运行环境。HTTP模块是Node.js内置模块之一,用于创建基于HTTP协议的服务器与客户端。
使用HTTP模块可以轻松创建一个HTTP服务器。
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/');
});
在上面的例子中,我们使用 createServer
方法创建了一个HTTP服务器,当请求到来时,会在回调中处理HTTP请求和响应。其中, req
表示客户端请求对象, res
表示服务器响应对象。
我们通过设置 statusCode
和 setHeader
方法来设置HTTP响应报头,最后使用 res.end
方法返回响应体。
除了创建HTTP服务器外,HTTP模块还能够用于发送HTTP请求。
const http = require('http');
http.get('http://localhost:3000/', (res) => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(chunk.toString());
});
}).on('error', (error) => {
console.error(error);
});
在上面的例子中,我们使用 http.get
方法向 http://localhost:3000/
发送了一个GET请求,并在回调中处理HTTP响应。其中, res
表示服务器响应对象。
我们通过 res.statusCode
获取响应状态码,通过 res.on
监听 data
事件,当响应数据传输时获取响应体。
HTTP请求内容包括请求方法、请求URL、请求头和请求体。
HTTP协议定义了许多请求方法,常见的有GET、POST、PUT、DELETE等。使用HTTP模块时,我们可以通过 http.METHODS
数组获取所有支持的HTTP方法。
const http = require('http');
console.log(http.METHODS);
使用HTTP模块创建HTTP服务器时,可以通过请求对象的 url
属性获取请求URL。使用HTTP模块发起HTTP请求时,可以通过 http.request
方法的第一个参数来设置请求URL。
const http = require('http');
const server = http.createServer((req, res) => {
console.log(req.url);
res.end();
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
const options = {
hostname: 'localhost',
port: 3000,
path: '/test',
method: 'GET'
};
const req = http.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(chunk.toString());
});
});
req.on('error', (error) => {
console.error(error);
});
req.end();
在上面的例子中,我们在HTTP服务器的回调中使用 req.url
打印请求URL,而在HTTP客户端中,我们使用 options
参数设置请求URL。
HTTP请求头包括客户端向服务器传输的额外信息,如Accept-Encoding、Cookie等。
在HTTP服务器中,我们可以通过请求对象的 headers
属性获取请求头。在HTTP客户端中,我们可以通过 http.request
方法的第二个参数来设置请求头。
const http = require('http');
const server = http.createServer((req, res) => {
console.log(req.headers);
res.end();
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
const options = {
hostname: 'localhost',
port: 3000,
path: '/',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
const req = http.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(chunk.toString());
});
});
req.on('error', (error) => {
console.error(error);
});
req.end();
在上面的例子中,我们在HTTP服务器的回调中使用 req.headers
打印请求头,而在HTTP客户端中,我们使用 options.headers
参数设置请求头。
HTTP请求体用于传输客户端向服务器发送的数据,如表单数据、JSON数据等。在HTTP服务器中,我们可以通过监听 data
事件来获取请求体。在HTTP客户端中,我们可以通过 http.request
方法的 write
方法和 end
方法来设置请求体。
const http = require('http');
const server = http.createServer((req, res) => {
let body = '';
req.on('data', (chunk) => {
body += chunk.toString();
});
req.on('end', () => {
console.log(body);
res.end();
});
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
const options = {
hostname: 'localhost',
port: 3000,
path: '/',
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
const req = http.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(chunk.toString());
});
});
req.on('error', (error) => {
console.error(error);
});
req.write(JSON.stringify({ name: 'John Doe' }));
req.end();
在上面的例子中,我们在HTTP服务器中监听 data
和 end
事件来获取请求体,而在HTTP客户端中,我们使用 req.write
方法设置请求体,并使用 req.end
方法结束请求体。