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功能一:实现目录列表
- 进行目录读取,得到目录列表中的文件名和目录名
读取目录Demo:
//04-读取目录.js代码块
var fs = require('fs')
fs.readdir('D:/www', function (err, files) {
if (err) {
return console.log('目录不存在')
}
console.log(files)
})
运行结果:
image.png
-
将读取到的内容替换到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 的 ` 字符串中,可以使用 ${} 来引用变量)
- 方法二:
使用模板引擎将读取到的内容替换到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)
})
})
})
网友评论