美文网首页
根据不同的 url 响应不同的 html 内容

根据不同的 url 响应不同的 html 内容

作者: 過尽千帆_YL | 来源:发表于2021-05-20 17:15 被阅读0次

1. 核心实现步骤

① 获取请求的 url 地址

② 设置默认的响应内容为 404 Not found

③ 判断用户请求的是否为 / 或 /index.html 首页

④ 判断用户请求的是否为 /about.html 关于页面

⑤ 设置 Content-Type 响应头,防止中文乱码

⑥ 使用 res.end() 把内容响应给客户端

2. 动态响应内容

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  // 1. 获取请求的 url 地址
  const url = req.url
  // 2. 设置默认的响应内容为 404 Not found
  let content = '<h1>404 Not found!</h1>'
  // 3. 判断用户请求的是否为 / 或 /index.html 首页
  // 4. 判断用户请求的是否为 /about.html 关于页面
  if (url === '/' || url === '/index.html') {
    content = '<h1>首页</h1>'
  } else if (url === '/about.html') {
    content = '<h1>关于页面</h1>'
  }
  // 5. 设置 Content-Type 响应头,防止中文乱码
  res.setHeader('Content-Type', 'text/html; charset=utf-8')
  // 6. 使用 res.end() 把内容响应给客户端
  res.end(content)
})

server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

案例 - 实现 clock 时钟的 web 服务器

1. 核心思路

把文件的实际存放路径,作为每个资源的请求 url 地址。

2. 实现步骤

① 导入需要的模块

② 创建基本的 web 服务器

③ 将资源的请求 url 地址映射为文件的存放路径

④ 读取文件内容并响应给客户端

⑤ 优化资源的请求路径

3. 步骤1 - 导入需要的模块

// 1.1 导入 http 模块
const http = require('http')
// 1.2 导入 fs 模块
const fs = require('fs')
// 1.3 导入 path 模块
const path = require('path')

3. 步骤2 - 创建基本的 web 服务器


// 2. 创建 web 服务器实例
const server = http.createServer()
// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function (req, res) {
 
})
// 4. 启动服务器
server.listen(80, function () {  
  console.log('server running at http://127.0.0.1')
})

3. 步骤3 - 将资源的请求 url 地址映射为文件的存放路径

//3.1 获取到客户端请求的url地址
const url = req.url
//3.2把 请求的url地址,映射为本地文件的存放地址
const fpath = path.join(__dirname,url)

3. 步骤4 - 读取文件的内容并响应给客户端

  // 4.1 根据“映射”过来的文件路径读取文件的内容
  fs.readFile(fpath, 'utf8', (err, dataStr) => {
    // 4.2 读取失败,向客户端响应固定的“错误消息”
    if (err) return res.end('404 Not found.')
    // 4.3 读取成功,将读取成功的内容,响应给客户端
    res.end(dataStr)
  })

3. 步骤5 – 优化资源的请求路径

  let fpath = ''
  if (url === '/') {
    fpath = path.join(__dirname, './clock/index.html')
  } else {
    fpath = path.join(__dirname, '/clock', url)
  }

4. 完整实例

// 1.1 导入 http 模块
const http = require('http')
// 1.2 导入 fs 模块
const fs = require('fs')
// 1.3 导入 path 模块
const path = require('path')

// 2.1 创建 web 服务器
const server = http.createServer()
// 2.2 监听 web 服务器的 request 事件
server.on('request', (req, res) => {
  // 3.1 获取到客户端请求的 URL 地址
  //     /clock/index.html
  //     /clock/index.css
  //     /clock/index.js
  const url = req.url
  // 3.2 把请求的 URL 地址映射为具体文件的存放路径
  // const fpath = path.join(__dirname, url)
  // 5.1 预定义一个空白的文件存放路径
  let fpath = ''
  if (url === '/') {
    fpath = path.join(__dirname, './clock/index.html')
  } else {
    //     /index.html
    //     /index.css
    //     /index.js
    fpath = path.join(__dirname, '/clock', url)
  }

  // 4.1 根据“映射”过来的文件路径读取文件的内容
  fs.readFile(fpath, 'utf8', (err, dataStr) => {
    // 4.2 读取失败,向客户端响应固定的“错误消息”
    if (err) return res.end('404 Not found.')
    // 4.3 读取成功,将读取成功的内容,响应给客户端
    res.end(dataStr)
  })
})
// 2.3 启动服务器
server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

相关文章

  • 根据不同的 url 响应不同的 html 内容

    1. 核心实现步骤 ① 获取请求的 url 地址 ② 设置默认的响应内容为 404 Not found ③ 判断用...

  • 03-Node-http模块

    Node - http 模块HTTP 协议是什么创建服务器根据 url 地址响应不同的内容动态响应静态资源获取 G...

  • 前端路由

    前端路由的概念 路由是根据不同的URL地址展示不同的内容和页面,前端路由就是把根据不同的URL返回不同页面的内容交...

  • nodejs 静态资源服务器作业

    完整实例(根据不同的url地址请求不同的文件【模板】) 复习 抽象方法及获取URL部分块的内容 url 读取文件...

  • 路由的概念

    路由的概念 路由是根据不同的 url 地址展示不同的内容或页面 早期的路由都是后端直接根据 url 来 reloa...

  • 前端路由的两种主流实现方式和原理

    路由历史 什么是路由?路由就是根据不同的url地址展示不同的内容或页面 早期的路由都是后端直接根据url来...

  • 根据不同环境切换不同url

    (function() { if (window.location.origin.indexOf("shop") ...

  • Vue-路由

    路由可以分为前端路由和后端路由 后端路由: 概念:根据不同的用户url请求,返回不同的内容 本质:URL请求地址和...

  • router 路由与 a 标签的区别

    1、 什么是路由? 路由是根据不同的URL来展示不同的内容或页面;前端路由就是把不同路由对应的不同页面或内容的展示...

  • 路由基础介绍

    什么是前端路由 -路由是根据不同的url地址展示不同的内容或页面 前端路由就是把不同的路由对应不同的内容或者页面的...

网友评论

      本文标题:根据不同的 url 响应不同的 html 内容

      本文链接:https://www.haomeiwen.com/subject/tpmmjltx.html