javaweb相关笔记


一、HTTP

(一)提取url路径和获取字符串

在浏览器中,请求服务器中的请求头,请求体是可以在浏览器中看到的;
开发过程中,也会经常获取请求信息。

1.通过url模块获取

通过url模块中的parse()可以将请求参数显示出来;
但是图中代码url.parse(req.url)获取到的都是字符串。如果想要更加方便的object类型,可以增加一个参数url.parse(req.url,true);

在这里插入图片描述
增加一个参数,获取的query会给出一个对象形式的值;这样就可以通过‘.’的形式获取
query.username

 const parse = url.parse(req.url, true)
  console.log('解析结果', parse);
  console.log('解析结果', parse.query.username)//

在这里插入图片描述
获取到的结果如下
在这里插入图片描述

2.通过实例化对象获取

实例化url与第一种方法的区别是不需要引入url模块,但是获取到请求参数的方法也不同

具体方式如下:

// 创建服务器对象
const server = http.createServer((req, res) => {
  // 实例化url
  // let url = new URL('http://localhost:9000?search=%27%E5%8D%81%E4%B8%87%E4%B8%AA%E4%B8%BA%E4%BB%80%E4%B9%88%27')
  let url = new URL(req.url, 'http://127.0.0.1')
  console.log(url.searchParams) //URLSearchParams { 'search' => "'十万个为什么'" }
  console.log(url.searchParams.get('search'))
  console.log(url.searchParams.search)
  res.end('你好呀')
})

代码运行的结果如下
在这里插入图片描述

(二)http请求响应

const server = http.createServer((req, res) => {
  // 设置响应状态码
  res.statusCode = 200;

  // 设置响应状态描述(一般不用)
  res.statusMessage = 'descript'

  // 设置响应头
  res.setHeader('content-type', 'text/html;charset=utf-8')
  res.setHeader('resHead', 'hhhhh')
  res.setHeader('heads', ['a', 's', 'd'])//设置多个同名响应头
  // 设置响应体
  res.write('你心动了🐎')
  res.end();
})

代码执行结果
在这里插入图片描述

(三)搭建静态资源服务器

1.获取文件请求路径;
2.通过readFile()方法可以**读取**到文件;
3.通过write()的方法可以将响应体输出到页面。
所以结合上述方法可以实现静态html的资源获取
const server = http.createServer((req, res) => {
  // 获取请求路径
  const { pathname } = new URL(req.url, 'http://127.0.0.1')
  // 动态获取资源
  fs.readFile(__dirname + '\\page' + pathname, ((err, data) => {
    if (err) {
      if (err.path.includes('favicon.ico')) {
        return
      }
      console.log('请求出错:', err)
      return
    }
    res.end(data)
  }))
})

通过上述代码,可以获取到请求路径中的pathname 比如下面的请求路径获取到的就是 form.html;
如果本地有该文件,会被呈现到你的浏览器页面;即使你的静态资源都是通过link引入的也会被获取到

在这里插入图片描述
在这里插入图片描述

(四)设置响应状态类型

静态资源的形式很多,为了更加规范,在读取文件之后可以设置文件类型

	//设置文件类型
	let mime = {
	  html: 'text/html',
	  css: 'text/css',
	  js: 'text/javascript',
	  png: 'image/png',
	  jpg: 'image/jpeg',
	  gif: 'image/gif',
	  mp4: 'video/mp4',
	  mp3: 'audio/mpeg',
	  json: 'application/json'
	}
    // 设置响应资源的mime类型(媒体/资源)
    // 获取文件后缀名
    const ext = path.extname(pathname)//.css
    const type = ext.slice(1)//css
    const typ = mime[type]
    if (!typ) {
      res.setHeader('content-type', 'application/octet-stream')
    }
    res.setHeader('content-type', typ)

(五)解决中文乱码问题

在请求静态资源中,有些资源会乱码;为了规避乱码问题,可以在响应头中设置字符编码;
响应头中的编码优先级 比html文件中的meta标签要高

if (!typ) {
      res.setHeader('content-type', 'application/octet-stream')
    }
    res.setHeader('content-type', typ)
    if (type === 'html') {
      res.setHeader('content-type', typ + ';charset=utf-8')//在头文件中设置的字符集 优先级高于html中meta
    }   

总结

跟着网课总结的笔记,每一段代码自己都有敲一遍验证,不懂得知识点还有很多,慢慢努力吧!

这个是nodejs学前笔记的续集,只是看到一半想起来大学javaweb都学过;果然是“少壮不努力,老大徒伤悲。”

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值