http响应内容类型:Content-Type

2020-11-09  本文已影响0人  似朝朝我心

http网络服务构建模块

const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
res.end('hello,你好啊!')
})
server.listen(8080,() => {
  console.log('Server is running at:http://localhost:8080')
})
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
  res.setHeader('Content-Type', 'text/html; charset=utf-8')
  res.end(`
  <h1>你好啊!</h1>
  <br>
  <button>点我有惊喜!</button>
  `)
})
server.listen(8080, () => {
  console.log(`Server is running at:http://localhost:8080`)
})

客户端通过域名向服务器发送请求,服务器响应内容返回给客户端的浏览器。

模仿服务器响应内容给客户端浏览器,结合fs文件系统发送文件中的数据。

准备如下类型的文件,写入简单的内容。



首先就需要发送文件给服务器,然后将文件中的内容给响应给浏览器。

const http = require('http')
const fs = require('fs')
const server = http.createServer()
server.on('request', (req, res) => {
  let url = req.url
  console.log(url)
  if (url === '/') {
    //发送文件给服务器
    fs.readFile('./data/views/source/index.html', (err, data) => {
      if (err) {
        res.setHeader('Content-Type', 'text/plain; charset=utf-8')
        console.log('文件读取失败')
      }else {
        //data 默认是二进制数据,可以通过toString转为字符串
        //res.end()支持2种数据类型,分别是二进制、字符串
        res.setHeader('Content-Type', 'text/html; charset=utf-8')
        res.end(data)
      }
    })
  }
})
server.listen(8080, () => {
  console.log(`Server is running at:http://localhost:8080`)
})

我们就可以看到了浏览器响应的index.html界面了。



我们将本地的index.html文件上传到服务器后,我们可以在index.html里面继续编写代码,服务器会动态更新index.html页面,不需要每次都要首先去重新关掉服务器,待内容写完后,然后启动服务器的繁琐步骤。

例如我们来添加一个按钮标签。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>hello world!</h1>
    <h2>You are beautiful!</h2>
    <button>bell!</button>
</body>
</html>
else if (url === '/xingkong') {
    fs.readFile('./data/views/source/xingkong.jpg', (err, data) => {
      if (err) {
        res.setHeader('Content-Type', 'text/plain; charset=utf-8')
        console.log('文件读取失败')
      } else {
        //图片不需要指定编码,图片文件类型为:image/jpeg
        res.setHeader('Content-Type', 'image/jpeg')
        res.end(data)
      }
    })
  }

url又叫统一资源定位符,一个url对应一个资源,这里的资源指的是我们的文件,比如我们的url === '/xingkong'对应的资源便是'./data/views/source/xingkong.jpg'

文件拓展名对应的Content-Type类型查找网址:
https://tool.oschina.net/commons

常见的有:
.css对应text/css
.txt对应text/plain
.html对应text/html
.jpg或jpeg对应image/jpeg
.png对应image/png
.js对应application/x-javascript

小结:



抽离思想:

抽离固定的路径:const dir = './data/views/source'

const http = require('http')
const fs = require('fs')
const server = http.createServer()
server.on('request', (req, res) => {
  let url = req.url
  const dir = './data/views/source'
  if (url === '/') {
    //发送文件给服务器
    fs.readFile(`${dir}/index.html`, (err, data) => {
      if (err) {
        res.setHeader('Content-Type', 'text/plain; charset=utf-8')
        console.log('文件读取失败')
      } else {
        res.setHeader('Content-Type', 'text/html; charset=utf-8')
        res.end(data)
      }
    })
  } else if (url === '/xingkong') {
    fs.readFile(`${dir}/xingkong.jpg`, (err, data) => {
      if (err) {
        res.setHeader('Content-Type', 'text/plain; charset=utf-8')
        console.log('文件读取失败')
      } else {
        //图片不需要指定编码,图片文件类型为:image/jpeg
        res.setHeader('Content-Type', 'image/jpeg')
        res.end(data)
      }
    })
  }
})

server.listen(8080, () => {
  console.log(`Server is running at:http://localhost:8080`)
})

绑定动态路径:

const http = require('http')
const fs = require('fs')
const server = http.createServer()
server.on('request', (req, res) => {
  let url = req.url
  console.log(url)
  const dir = './data/views/source'
  let filePath = '/index.html'
  if (url !== '/') {
    filePath = url
  }

  fs.readFile(`${dir}${filePath}`, (err, data) => {
    if (err) {
      res.setHeader('Content-Type', 'text/plain; charset=utf-8')
      return res.end('404 Not Found')
    }
    res.end(data)
  })
})
server.listen(8080, () => {
  console.log(`Server is running at:http://localhost:8080`)
})
上一篇 下一篇

猜你喜欢

热点阅读