HPPT请求与响应处理

GET请求参数

参数被放置在浏览器地址栏中,例如:http://localhost:3000/?name=zhangsan&age=20.?后面是请求参数,也就是额外携带的数据。

在Node.js提供了内置模块,可以通过内置模块中的方法,来处理这个请求参数。

引入内置模块url(这个模块用来处理URL请求地址):

const url = require('url');

url这个模块下面有一个parse方法,用来解析url。

//parse方法最后会返回一个对象,会把url里面的各个部分都放到对象的一个
//属性里面。  
url.parse(req.url,true)
parse里面有两个参数,第一个参数是要解析的url地址,第二个参数是将'查询参数'解析成对象形式。
  • //url里面的属性: //search:查询参数 //query:和search差不太多,区别是search后面有?,query后面没有? //pathname:请求地址
  • 参数被放置在浏览器地址栏中 
  • 获取get参数使用req.url

POST请求参数

<form method="post" action="http://localhost:3000">
<input type="text" name="username">
<input type="password" name="password">
<input type='submit'>
</form>

post参数是通过事件的方式接收的,data事件和end事件。post参数理论上数据量可以是无限的,作为服务器来讲为了减轻压力,post参数不是一次就接收完的。比如说传递一个100兆的数据,可能分10次接收,每一次接收10兆。当有请求参数传递的时候就会触发data事件,当请求参数传递完成时会触发end事件。

const http = require('http');
const app = http.createServer();
//处理服务器端接收到的字符
const querystring = require('querystring'); app.on(
'request',(req,res)=>{ //由于post参数不是一次传递完的,所以需要声明一个变量,当触发data时将传递过来的参数与声明的变量进行拼接。
let postParams = ''; req.on('data',params=>{
postParams+=params;
}) }) 
//当end事件触发时,输出参数。
req.on('end',()=>{
//使用querystring下的parse方法,将postParams转换为对象
console.log(querystring.parse(
postParams));
})
res.end('ok')
})
  •  post参数被放置在请求体中进行传输
  • 获取post参数需要使用data事件和end事件
  • 获取到的post参数是一个字符串的格式,使用内置模块querystring下的parse方法把参数转换为对象格式

静态资源

静态资源:服务器端不需要处理可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。

//静态资源访问
const http = require('http');
const url = require('url');
const path = require('path');
const fs = require('fs');
//mime这个第三方模块的功能是根据当前的请求路径,分析出这个资源的类型,通过返回值的方式返回资源类型。
const mime = require('mime'); 
const app = http.createServer();
//监听服务器
app.on('request',(req,res)=>{
  //获取用户请求路径
let pathname = url.parse(req.url).pathname
pathname = pathname =='/'? '/index.html': pathname
//将用户的请求路径转换为实际的服务器硬盘路径
let realpath = path.join(__dirname,'public'+pathname)
console.log(realpath)
let type = mime.getType(realpath)
// console.log(type); 
fs.readFile(realpath,(error,result)=>{
  if(error != null){
    res.writeHead(404,{
       'content-type':'text/html;charset=utf8'
    })
  res.end('文件读取失败')
  return;
  }
  res.writeHead(200,{
   'content-type' : type
  })
  res.end(result)
})
});
app.listen(80);
console.log('服务器启动成功!')

动态资源

动态资源:相同的请求地址可以传递不同的请求参数,得到不同的响应资源,这种资源就是动态资源。

posted @ 2021-11-28 09:28  codejing  阅读(722)  评论(0编辑  收藏  举报