Node - http 模块
HTTP 协议是什么
HTTP 超文本传输协议,用于规范客户端浏览器和服务器之间的数据交互的格式,特点是无连接,无状态
- 无连接:每次连接只处理一个请求,响应完成后断开连接
- 无状态:协议对于事务处理没有记忆能力
创建服务器
// 引入http模块
const http = require('http');
// 创建WEB服务器
const app = http.createServer();
// 监听请求
// req -- request ---- 请求对象, 保存了和请求有关的全部信息
// res -- response ---- 响应对象, 通过它控制响应给浏览器信息
app.on('request', (req, res) => {
res.end('ok')
})
app.listen(3000);
console.log('run');
根据 url 地址响应不同的内容
// 根据 url 地址响应不同的内容
const http = require('http');
const url = require('url');
const app = http.createServer();
app.on('request', (req, res) => {
let pathname = url.parse(req.url).pathname.toLowerCase();
if (pathname === '/index') {
res.end('index');
} else if (pathname === '/list') {
res.end('list');
} else {
res.end('not found');
}
});
app.listen(3000, () => {
console.log('run');
});
动态响应静态资源
// 动态响应静态资源
const http = require('http');
const url = require('url');
const path = require('path');
const fs = require('fs');
const app = http.createServer();
app.on('request', (req, res) => {
let pathname = url.parse(req.url).pathname.toLowerCase();
pathname = pathname === '/' ? 'default.html' : pathname;
let realPath = path.join(__dirname, 'public', pathname);
fs.readFile(realPath, (err, data) => {
if (err) {
// 设置响应内容格式
res.writeHead(404, {
'content-type': 'text/plain;charset=utf8'
});
return res.end(err.message)
}
res.end(data)
})
});
app.listen(3000, () => {
console.log('run');
});
获取 GET 请求参数
const http = require('http');
const url = require('url');
const querystring = require('querystring');
const app = http.createServer();
app.on('request', (req, res) => {
// 获取 dasjk=121 字符串
let query = url.parse(req.url).query;
// 将 dasjk=121 字符串解析成对象
let params = querystring.parse(query);
for (let i in params) {
let index = "" + i;
console.log(i, params[index]);
}
res.end();
});
app.listen(3000);
console.log('run');
获取 POST 请求参数
const http = require('http');
const fs = require('fs');
const app = http.createServer();
app.on('request', (req, res) => {
let postParams = '';
// post 参数是通过事件的方式接受的
// 因为 post 提交的内容是未知大小
// data 当请求参数传递时, data 事件触发
// end 当请求参数传递完成时, end 事件触发
req.on('data', (data) => {
// console.log(data);
postParams += data;
});
req.on('end', () => {
console.log(postParams);
});
});
app.listen(3000);
console.log('run');