美文网首页
2.Node.js初步实现Apache功能

2.Node.js初步实现Apache功能

作者: 璎珞纨澜 | 来源:发表于2019-03-05 15:03 被阅读0次

Apache功能一:实现动态返回网站文件

客户端向Apache服务器请求网站,Apache返回其网站根目录下的网站文件。

var http = require('http')
var fs = require('fs')
var server = http.creatServer()
var wwwDir = 'D:/www'

server.on('request' , function (req, res) {
  var url = req.url
  var filePath = '/index.html'
  if (url !== '/') {
    filePath = req.url
  }
  fs.readFile(wwwDir + filePath, function (err, data) {
    if (err) {
      return res.end('404 not found.')
    }
    res.end(data)
  })
})

server.listen(3000, function () {
  console.log('running...')
})


Apache功能一:实现目录列表

  1. 进行目录读取,得到目录列表中的文件名和目录名

读取目录Demo:

//04-读取目录.js代码块
var fs = require('fs')

fs.readdir('D:/www', function (err, files) {
  if (err) {
    return console.log('目录不存在')
  }
  console.log(files)
})
运行结果: image.png
  1. 将读取到的内容替换到template.html中。

    • 方法一:(笨办法)
      a. 在template.html中需要替换的位置预留特殊标记
      b. 根据files生成需要的html内容
<!--template.html代码块-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 </head>
 <body>
<h1>Index of /</h1>
<ul>^_^</ul>
</body></html>
//03-Apache-目录列表.js代码块
var http = require('http')
var fs = require('fs')

var server = http.creatServer()
var wwwDir = 'D:/www'

server.on('request', function(req, res) {
  var url = req.url
  fs.readFile('.template.html', function (err, data) {
    if (err) {
      return res.end('404 Not Found.')
    }
    fs.readdir('D:/www', function (err, files) {
      if (err) {
        return console.log('目录不存在')
      }
      // 生成需要替换的内容
      var content = ''
      var urlLi = ""
      files.forEach(function (item) {
        urlLi = "D:/www/" + item
        content += `<li><a href=${urlLi}>${item}</a></li>`})

      // 替换      
      data = data.toString()
      data = data.replace('^_^', content)

      // 发送解析替换过后的响应数据
      res.end(data)
    })
  })
})

(在 EcmaScript 6 的 ` 字符串中,可以使用 ${} 来引用变量)

运行结果: image.png
  • 方法二:
    使用模板引擎将读取到的内容替换到template.html中 - 服务端渲染
    在Node中使用 art-template 模板引擎方法(模板引擎其实最早就是诞生于服务器领域,后来才发展到了前端):
    (1)将模板引擎安装到代码目录npm install art-template
    (2)在需要使用的文件模块中加载art-template
    (3)查art-template 官方文档,使用模板引擎的API
<!--template.html-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 </head>
 <body>
<h1>Index of /</h1>
<ul>{{each files}}
      <li><a href="D:/www">{{$value}}</a></li>
    {{/each}}</ul>
</body></html>
//07-在Apache案例中加入模板引擎.js
var http = require('http')
var fs = require('fs')
//加载art-template
var template = require('art-template')
var server = http.creatServer()
var wwwDir = 'D:/www'

server.on('request', function(req, res) {
  var url = req.url
  fs.readFile('.template.html', function(err, data) {
  if (err) {
    return res.end('404 not found.')
  }
  fs.readdir(wwwDir, function (err, files) {
    if (err) {
      return res.end('目录不存在')
    }
    // 使用模板引擎解析替换 data 中的模板字符串
    // fs.readFile默认读取到的data是二进制数据,模板引擎的render方法需要接收的是字符串。
    var htmlStr = template.render(data.toString(), {
      files: files
     })
    // 发送解析替换过后的响应数据
      res.end(htmlStr)
    })
  })
})

相关文章

网友评论

      本文标题:2.Node.js初步实现Apache功能

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