客户端访问服务器,服务器对客户端发来的数据做一个处理之后响应回去
1.客户端访问服务器
通过http协议去访问
什么是http协议呢? 超文本传输协议
请求的话呢有一个请求体和请求体:
请求头:键值对保存客户端的信息
请求体:保存post发送的信息
1.服务器会处理客户端发来的请求 将浏览器发送到服务器的数据封装成一个Request对象
2.然后再执行回调函数createServe将上一步封装好的对象赋值给第一个参数req
3.在回调函数中通过req可以获得本次请求中浏览器向服务器发送的数据
代码实现:
// 1.导入http模块
// 它是一个内置模块,返回的是一个对象
const http = require('http')
// 2.创建一个服务
// 这个服务就是用来接收来自客户端的http请求 并且可以处理这个请求
// 这个方法需要传入1个回调函数 两个形参:req res
// 这个回调函数 在服务接收到来自客户端的http请求的时候 就会自动执行
const serve = http.createServer((req, res) => {
console.log(`接收到了来自客户端${getClientIp(req)}请求`);
res.end('Hello node.js')
});
// 3.开启这个服务
// 监听:
// 参数1: 服务工作的端口号
// 参数2:回调函数 在服务器开启以后自动执行
serve.listen(8000, () => {
console.log('服务成功开启');
})
function getClientIp(req) {
return req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress;
};
端口类似于生活中去医院看病的 具体窗口,如付款窗口,每一个窗口发挥着不同的作用 ;IP就是 医院地址了
需重点掌握几个方法:
a. req.headers 获取本次请求 客户端发送到服务端的请求体消息
b. req.url 获取本次请求 客户端请求的URL部分 以'/'开头 如果没有URL 值就是'/'
c. req.method 获取本次请求 客户端请求服务端的HTTP方法get/post
2.服务器对客户端发来的数据做一个处理之后响应回去
// 1.导入http模块
// 它是一个内置模块,返回的是一个对象
const http = require('http')
const serve = http.createServer((req, res) => {
console.log(`接收到了来自客户端${getClientIp(req)}请求`);
res.setHeader('Content-Type', 'text/html;charset=utf8')
// write方法向浏览器写入数据 直接收字符串和Buffer数据
res.write('<h1>王小美</h1>');
// 设置响应状态码
res.statusCode = 200;
// end方法代表本次请求结束了,一定要写的
// 可以传递参数:表示结束并将数据追加到响应体中
res.end('Hello node.js');
});
serve.listen(8000, () => {
console.log('服务成功开启');
})
function getClientIp(req) {
return req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress;
};
重点掌握:
响应头:
Content-Type: 告诉浏览器 服务器发给你的是什么数据类型
还可以告诉浏览器文本的编码格式
text/html 服务端给浏览器的数据是html 浏览器就会按照html解析
text/plain 服务端给浏览器的数据是纯文本 浏览器就会原样显示
res是response的缩写,意为响应
req是request的缩写,意为请求