现阶段的项目是须要手动修改地址栏来是实现操做的,这太过程序员,怪不得没对象。让咱们优化使用体验,今后再也不
new Object
html
如今须要将地址栏操做,转变为点选操做,首先咱们应该将代码输出为web页面前端
前面已经讲过如何输出页面,此次的需求又有了小小的变更。咱们须要输出一个动态的页面,如何实现?node
art-template
等优秀的字符串操做库在根目录下建立 template
文件夹,其下再次建立dir.js
,代码以下:程序员
/**
*
* @param {*} data object 必填
*/
function Dir(data) {
/**
* 判断data是否为对象
* 有一点须要说明,在编写被调用的函数,模板或者库的时候,须要对传入值进行判断,给出相应提示
* 这样有利于后期维护和他人的使用
*/
if (Object.prototype.toString.call(data) === '[object Object]') {
const html = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<a href="https://www.baidu.com/">百度</a>
</body>
</html>
`
return html
} else {
return '参数类型错误'
}
}
module.exports = Dir
```
复制代码
同时须要修改header 文件下属的route.jsweb
<!--引入文件-->
const Dir = require('../template/dir')
<!--直接将demo页面输出-->
// awaitRes.end(file.join(','))
awaitRes.end(Dir({}))
复制代码
输出结果数组
awaitRes.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' })
复制代码
awaitRes.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' })
复制代码
dir.js
修改以下bash
<a href="https://www.baidu.com/">百度</a>
复制代码
改写为:服务器
${data.files.map((item) => {
return `<a href="${data.dir + '/' + item}">${item}</a>`
})}
复制代码
route.js
修改以下函数
awaitRes.end(Dir({}))
复制代码
改变为:post
const data = {
title: path.basename(filePath),
dir: path.relative(conf.root, filePath),
files: files.toString().split(',') // 置换为数组
}
awaitRes.end(Dir(data))
复制代码
输出效果
从截图能够看出,路径多拼接了一个
src
,其实咱们再点更深刻的路径会再多一个,由于咱们计算的来的路径,并无相对于根路径
```
const data = {
title: path.basename(filePath),
dir: path.relative(conf.root, filePath),
files: files.toString().split(',') // 置换为数组
}
```
```
const dir = path.relative(conf.root, filePath)
const data = {
title: path.basename(filePath),
dir: dir ? `/${dir}` : '', // 须要注意一点`path.relative` 是相对与根路径计算的,真的访问根路径就会返回空
files: files.toString().split(',') // 置换为数组
}
```
复制代码
输出动态页面的功能已经实现,可是做为一个前端,页面不但要好用,还要漂亮
dir.js
修改成:/**
*
* @param {*} data object 必填
*/
function Dir(data) {
/**
* 判断data是否为对象
* 有一点须要说明,在编写被调用的函数,模板或者库的时候,须要对传入值进行判断,给出相应提示
* 这样有利于后期维护和他人的使用
*/
if (Object.prototype.toString.call(data) === '[object Object]') {
const html = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>${data.title}</title>
<style>
a {
font-size: 20px;
padding: 4px 10px;
}
</style>
</head>
<body>
${itemFn(data)}
</body>
</html>
`
return html
} else {
return '参数类型错误'
}
}
function itemFn(val) {
let tem = ''
val.files.map((item) => {
tem += `
<div>
<a href="${val.dir + '/' + item}">${item}</a>
</div>
`
})
return tem
}
module.exports = Dir
复制代码
close