目录
一、请求响应与HTTP协议
1、创建web服务器
//引入模块
const http = require('http');
//http.createServer()搭建web服务器
let app=http.createServer((req, res) => {
//req请求;全称(request)
//res响应;全称(resposne)
console.log(req.connection.remoteAddress);
res.write('响应还未结束')
res.end('ok')
})
//启动服务器
//监视3000端口
app.listen(3000,() => {
console.log('server run port 3000')
})
//在终端输入node 文件名.js
//启动成功后,可以在浏览器访问127.0.0.1:3000
我们用http.createServer()创建一个http服务
2、请求与响应
((req, res) => {}这是匿名函数,这个函数充当回调函数,当有http请求时,这个函数会自动被调用。这里两个参数。第一个参数表示来自客户端浏览器的请求,第二个参数用来设置对本次请求的响应。函数的形参名并不重要,但是一般使用req(resposne)和res(request)表示。
当某个客户端来请求这个服务器时,这个函数会自动调用,同时会自动给这两个参数赋值。第一个参数中包括本次请求的信息。
1、req
req : 请求
req.url :本次请求的地址
req.method :获取请求行中的请求方法
req.headers :获取请求头
2、res
第二个参数用来设置本服务器对这次请求的处理。这个参数一般命名是res,它是一个对象,其中有很多方法和属性。
res.end() :把本次的处理结果返回给客户端浏览器,如果没有,客户端浏览器就收不到响应。
res.setHeader() :设置响应头,比如设置响应体的编码
比如这种乱码问题,res.setHeader() 设置响应头可以解决。
const http = require('http');
const path = require('path');
const fs = require('fs');
let app = http.createServer((req, res) => {
let { url, method, headers } = req;
url = url.toLowerCase();
console.log(url);
if (url === "/") {
//响应头
res.setHeader('Content-Type', 'text/html;charset=utf-8');
res.end('访问个毛线')
}
else {
let html404 = fs.readFileSync(path.join(__dirname, './public/index404.html'));
res.statusCode = 404;
res.end(html404);
}
});
app.listen(3000, () => {
console.log('Server run port 3000');
});
3、根据不同url地址处理请求:
例:
const http = require('http');
const path = require('path');
const fs = require('fs');
let app = http.createServer((req, res) => {
let { url, method, headers } = req;
console.log(headers);
url = url.toLowerCase();
console.log(url);
//请求地址"/"或"index.html"
if (url === "/" || url === "/index.html") {
let html = fs.readFileSync(path.join(__dirname, './public/index.html'));
res.end(html);
}
//请求地址"test"
else if (url === "/test") {
//响应头
res.setHeader('Content-Type', 'text/html;charset=utf-8');
res.end('访问个毛线')
}
else {
let html404 = fs.readFileSync(path.join(__dirname, './public/index404.html'));
res.statusCode = 404;
res.end(html404);
}
});
app.listen(3000, () => {
console.log('Server run port 3000');
});
3、HTTP协议
HTTP(全称:HyperText Transfer Protocol)超文本传输协议,
规定了如何从网站服务器传输超文本到本地浏览器,基于客户端服务器架构工作,是客户端和服务器端请求和应答的标准。
请求报文:
请求方式:(get请求数据、post发送数据 、...)(可以下载postman,API调试工具,更方便)
get类型接口:
参数被放置在浏览器地址栏中, 例如:
http://localhost:3000/?name=zhangsan&age=20
参数获取需要借助系统模块url,url模块用来处理url地址
例:
const http = require('http');
const path = require('path');
const URL = require('url');
const qs = require('querystring')
let app = http.createServer((req, res) => {
let { url, method } = req;
let { pathname,query} = URL.parse(url);
if (pathname === '/news' && method === 'GET') {
let {id}=qs.parse(query)
let news = {
list:[
{ id: 1, msg: '11111111111111111111111111' },
{ id: 2, msg: '22222222222222222222222222' },
{ id: 3, msg: '33333333333333333333333333' }
]
}
for(let i=0; i<news.list.length; i++){
if(news.list[i].id == id){
res.end(JSON.stringify(news.list[i]));
return;
}
}
res.end(JSON.stringify({err:true,msg:'id不存在'}));
}
else {
res.statusCode = 404;
res.end('Not Found');
}
})
app.listen(3000, () => {
console.log('Server run port 3000');
})
post类型接口:
在发post请求时,传递的数据会在请求体中,也是字符串格式,并且是一点一点上传到web
服务器的,每上传一部分就会触发data事件,而最后全部上传完成之后,会触发end事件。
使用querystring将参数转换为对象格式(解析参数)
const http = require('http');
const path = require('path');
const URL = require('url');
const qs = require('querystring')
let app = http.createServer((req, res) => {
let { url, method } = req;
let { pathname, query } = URL.parse(url);
if (pathname === '/news' && method === 'POST') {
let data = '';
req.on('data', (chunk) => {
data += chunk;
})
req.on('end', () => {
let { id } = qs.parse(data);
let news = {
list: [
{ id: 1, msg: '11111111111111111111111111' },
{ id: 2, msg: '22222222222222222222222222' },
{ id: 3, msg: '33333333333333333333333333' }
]
}
for (let i = 0; i < news.list.length; i++) {
if (news.list[i].id == id) {
res.end(JSON.stringify(news.list[i]));
return;
}
}
res.end(JSON.stringify({ err: true, msg: 'id不存在' }));
})
}
else {
res.statusCode = 404;
res.end('Not Found');
}
})
app.listen(3000, () => {
console.log('Server run port 3000');
})
响应报文:
(HTTP状态码)
- 200 请求成功
- 404 请求资源没找到
- 403 禁止请求
- 500 服务器端错误
- 400 客户端错误
例:
状态200,请求成功
标签:Nond,HTTP,请求,url,res,req,Js,let,http From: https://blog.csdn.net/weixin_68856615/article/details/141500789